黑马程序员_学习笔记String类

来源:互联网 发布:淘宝申诉耐克授权书 编辑:程序博客网 时间:2024/06/05 17:58

------Java培训、Android培训、iOS培训、.Net培训期待与您交流! -------



String类是Java中用得非常频繁的一个类,它的构造器和方法非常多,使用也是相当的灵活。


字符串是常量;它们的值在创建之后不能更改。


一、String初始化的几种方法

1、直接量赋值

String str="hello,java";

等效于

char[] ch={'h','e','l','l','o',',','j','a','v','a'};

String str=new String(ch);

在堆内存中创建“hello,java”对象,用声明为String 类型的str变量去指向该地址

若再

str="welcome to itheima";

此时会在堆内存中创建“welcome to itheima”对象,str应用指向该地址,但内存中还会存在“hello,java”。

2、new 创建

String类有很多构造器

常用的有:

String(byte[] bytes)
          通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 StringString(byte[] bytes,Charset charset)
          通过使用指定的 charset 解码指定的 byte 数组,构造一个新的String

String(char[] value)
          分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。String(char[] value, int offset, int count)
          分配一个新的 String,它包含取自字符数组参数一个子数组的字符。String(String original)
          初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。String(StringBuffer buffer)
          分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。String(StringBuilder builder)
          分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。

3.使用连接符创建“+”

String str1="hello,";

String str2="java";

String str3=str1+str2;

如果此时执行

System.out.pirntln(str==str3);

会发现打印为true,即说明str3指向的对象和str指向的对象相同。

二、常用方法

charAt(int index)           返回指定索引处的char 值。

compareTo(String anotherString)      按字典顺序比较两个字符串。

compareToIgnoreCase(String str)    按字典顺序比较两个字符串,不考虑大小写。

endsWith(String suffix)          测试此字符串是否以指定的后缀结束。

indexOf(int ch)          返回指定字符在此字符串中第一次出现处的索引。

indexOf(String str)        返回指定子字符串在此字符串中第一次出现处的索引。

lastIndexOf(int ch)          返回指定字符在此字符串中最后一次出现处的索引。

lastIndexOf(String str)         返回指定子字符串在此字符串中最右边出现处的索引。

length()          返回此字符串的长度。

matches(String regex)      告知此字符串是否匹配给定的正则表达式。

replace(char oldChar, char newChar)返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar 得到的。

replace(CharSequence target,CharSequence replacement)           使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。

replaceAll(String regex,String replacement)           使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

split(String regex)           根据给定正则表达式的匹配拆分此字符串。

startsWith(String prefix)          测试此字符串是否以指定的前缀开始。

substring(int beginIndex)          返回一个新的字符串,它是此字符串的一个子字符串。

substring(int beginIndex, int endIndex)           返回一个新字符串,它是此字符串的一个子字符串。

toCharArray()           将此字符串转换为一个新的字符数组。

toLowerCase()           使用默认语言环境的规则将此String 中的所有字符都转换为小写。

toUpperCase()           使用默认语言环境的规则将此String 中的所有字符都转换为大写。

trim()               返回字符串的副本,忽略前导空白和尾部空白。



<span style="font-size:18px;">class Demo {public static void main(String[] args) {String s = "黑马程序员";for (int x = 0; x < s.length(); x++) {sop(s.charAt(x));}sop("\r\n");int i = 0;if ((i = s.indexOf('马')) != -1) {for (int x = ++i; x < s.length(); x++) {sop(s.charAt(x));}Sop("");}}public static void sop(Object obj) {System.out.print(obj);}public static void Sop(Object obj) {System.out.println(obj);}}</span>
<span style="font-size:18px;">class StringDemo {public static void main(String[] args) {/* * String s1 = "abc";//s1是一个类类型变量, "abc"是一个对象。 //字符串最大特点:一旦被初始化就不可以被改变。 *  * String s2 = new String("abc"); *  * //s1和s2有什么区别? //s1在内存中有一个对象。 //s2在内存中有两个对象。 *  *  *  *  *  * System.out.println(s1==s2); * System.out.println(s1.equals(s2));//String类复写了Object类中equals方法, * //该方法用于判断字符串是否相同。 */String s = "abcde";method_1(s);}/* * String类是对字符串事物的描述。 该类定义了专门用于操作字符串的方法。 "abc": */public static void method_1(String s) {char ch = s.charAt(3);System.out.println("ch=" + ch);int num = s.codePointAt(3);System.out.println("num=" + num);String s1 = "qq";s1 = s1.concat("mm");System.out.println("s1=" + s1);System.out.println("qq" + "mm");String a = "opq";String b = "opq";System.out.println("a==b:" + (a == b));}}</span>
<span style="font-size:18px;"></pre><pre name="code" class="java"></span>
<span style="font-size:18px;">/*<strong>String类适用于描述字符串事物。那么它就提供了多个方法对字符串进行操作。常见的操作有哪些?</strong>1,获取。1.1 字符串中的包含的字符数,也就是字符串的长度。int length():获取长度。1.2 根据位置获取位置上某个字符。char charAt(int index):1.3 根据字符获取该字符在字符串中位置。int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。int indexOf(int ch, int fromIndex) :从fromIndex指定位置开始,获取ch在字符串中出现的位置。int indexOf(String str):返回的是str在字符串中第一次出现的位置。int indexOf(String str, int fromIndex) :从fromIndex指定位置开始,获取str在字符串中出现的位置。int lastIndexOf(int ch) :2,判断。2.1 字符串中是否包含某一个子串。boolean contains(str):特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。if(str.indexOf("aa")!=-1)而且该方法即可以判断,有可以获取出现的位置。2.2 字符中是否有内容。boolean isEmpty(): 原理就是判断长度是否为0. 2.3 字符串是否是以指定内容开头。boolean startsWith(str);2.4 字符串是否是以指定内容结尾。boolean endsWith(str);2.5 判断字符串内容是否相同。复写了Object类中的equals方法。boolean equals(str);2.6 判断内容是否相同,并忽略大小写。boolean equalsIgnoreCase();3,转换。3.1 将字符数组转成字符串。构造函数:String(char[])String(char[],offset,count):将字符数组中的一部分转成字符串。静态方法:static String copyValueOf(char[]);static String copyValueOf(char[] data, int offset, int count) static String valueOf(char[]):3.2 将字符串转成字符数组。**char[] toCharArray():3.3 将字节数组转成字符串。String(byte[])String(byte[],offset,count):将字节数组中的一部分转成字符串。3.4 将字符串转成字节数组。byte[]  getBytes():3.5 将基本数据类型转成字符串。static String valueOf(int)static String valueOf(double)//3+"";//String.valueOf(3);特殊:字符串和字节数组在转换过程中,是可以指定编码表的。4,替换String replace(oldchar,newchar);5,切割String[] split(regex);6,子串。获取字符串中的一部分。String substring(begin);String substring(begin,end);7,转换,去除空格,比较。7.1 将字符串转成大写或则小写。 String toUpperCase(); String toLowerCase();7.2 将字符串两端的多个空格去除。String trim();7.3 对两个字符串进行自然顺序的比较。int compareTo(string); */class StringMethodDemo {public static void method_7() {String s = "    Hello Java     ";sop(s.toLowerCase());sop(s.toUpperCase());sop(s.trim());String s1 = "a1c";String s2 = "aaa";sop(s1.compareTo(s2));}public static void method_sub() {String s = "abcdef";sop(s.substring(2));// 从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常。sop(s.substring(2, 4));// 包含头,不包含尾。s.substring(0,s.length());}public static void method_split() {String s = "zhagnsa,lisi,wangwu";String[] arr = s.split(",");for (int x = 0; x < arr.length; x++) {sop(arr[x]);}}public static void method_replace() {String s = "hello java";// String s1 = s.replace('q','n');//如果要替换的字符不存在,返回的还是原串。String s1 = s.replace("java", "world");sop("s=" + s);sop("s1=" + s1);}public static void method_trans() {char[] arr = { 'a', 'b', 'c', 'd', 'e', 'f' };String s = new String(arr, 1, 3);sop("s=" + s);String s1 = "zxcvbnm";char[] chs = s1.toCharArray();for (int x = 0; x < chs.length; x++) {sop("ch=" + chs[x]);}}public static void method_is() {String str = "ArrayDemo.java";// 判断文件名称是否是Array单词开头。sop(str.startsWith("Array"));// 判断文件名称是否是.java的文件。sop(str.endsWith(".java"));// 判断文件中是否包含Demosop(str.contains(".java"));}public static void method_get() {String str = "abcdeakpf";// 长度sop(str.length());// 根据索引获取字符。sop(str.charAt(4));// 当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException。// 根据字符获取索引sop(str.indexOf('m', 3));// 如果没有找到,返回-1.// 反向索引一个字符出现位置。sop(str.lastIndexOf("a"));}public static void main(String[] args) {method_7();// method_trans();// method_is();// method_get();/* * String s1 = "abc"; String s2 = new String("abc"); *  * String s3 = "abc"; System.out.println(s1==s2); * System.out.println(s1==s3); */}public static void sop(Object obj) {System.out.println(obj);}}</span>

三、StringBuffer类

为了提高字符串的效率,Java就按照面向对象的思想给我们已经封装好了这么一个字符串缓冲区。
是字符串缓冲区,是一个容器。字符串的组成原理就是通过该类实现的。

StringBuffer 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而insert 方法则在指定的点添加字符。


StringBuffer特点: 
1 长度是可以变化的。
2 可以直接操作多个数据类型。
3.StringBuffer可以对字符串内容进行增删。
4 最终会通过toString变成字符串。


常见功能:


1 存储
2 删除
3 获取
4 修改
5 反转

append(boolean b) 
          将 boolean 参数的字符串表示形式追加到序列。 
 StringBuffer append(char c) 
          将 char 参数的字符串表示形式追加到此序列。 
 StringBuffer append(char[] str) 
          将 char 数组参数的字符串表示形式追加到此序列。 
 StringBuffer append(char[] str, int offset, int len) 
          将 char 数组参数的子数组的字符串表示形式追加到此序列。 
 StringBuffer append(CharSequence s) 
          将指定的 CharSequence 追加到该序列。 
 StringBuffer append(CharSequence s, int start, int end) 
          将指定 CharSequence 的子序列追加到此序列。 
 StringBuffer append(double d) 
          将 double 参数的字符串表示形式追加到此序列。 
 StringBuffer append(float f) 
          将 float 参数的字符串表示形式追加到此序列。 
 StringBuffer append(int i) 
          将 int 参数的字符串表示形式追加到此序列。 
 StringBuffer append(long lng) 
          将 long 参数的字符串表示形式追加到此序列。 
 StringBuffer append(Object obj) 
          追加 Object 参数的字符串表示形式。 
 StringBuffer append(String str) 
          将指定的字符串追加到此字符序列。 
 StringBuffer append(StringBuffer sb) 
          将指定的 StringBuffer 追加到此序列中。 

delete(int start, int end) 

          移除此序列的子字符串中的字符。 
 StringBuffer deleteCharAt(int index) 
          移除此序列指定位置的 char。 

insert(int offset, boolean b) 
          将 boolean 参数的字符串表示形式插入此序列中。 
 StringBuffer insert(int offset, char c) 
          将 char 参数的字符串表示形式插入此序列中。 
 StringBuffer insert(int offset, char[] str) 
          将 char 数组参数的字符串表示形式插入此序列中。 
 StringBuffer insert(int index, char[] str, int offset, int len) 
          将数组参数 str 的子数组的字符串表示形式插入此序列中。 
 StringBuffer insert(int dstOffset, CharSequence s) 
          将指定 CharSequence 插入此序列中。 
 StringBuffer insert(int dstOffset, CharSequence s, int start, int end) 
          将指定 CharSequence 的子序列插入此序列中。 
 StringBuffer insert(int offset, double d) 
          将 double 参数的字符串表示形式插入此序列中。 
 StringBuffer insert(int offset, float f) 
          将 float 参数的字符串表示形式插入此序列中。 
 StringBuffer insert(int offset, int i) 
          将 int 参数的字符串表示形式插入此序列中。 
 StringBuffer insert(int offset, long l) 
          将 long 参数的字符串表示形式插入此序列中。 
 StringBuffer insert(int offset, Object obj) 
          将 Object 参数的字符串表示形式插入此字符序列中。 
 StringBuffer insert(int offset, String str) 
          将字符串插入此字符序列中。 

reverse()
          将此字符序列用其反转形式取代。



四、StringBuilder(JDK1.5之后出现)

一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。 


StringBuffer 是线程同步的,效率较低,加了锁。
StringBuilder是线程不同步的,适用单线程,用于多线程不安全。


单线程情况下,建议使用 StringBuilder可以提高效率,若果需要同步的话可以自己加锁。


------Java培训、Android培训、iOS培训、.Net培训期待与您交流! -------



0 0