String类 的基本用法
1.String 对象的创建
String对象的创建有两种方式。
第1 种方式就是我们最常见的创建字符串的方式:
String str1 = "Hello, 慕课网";
第 2 种方式是对象实例化的方式,使用new关键字,并将要创建的字符串作为构造参数:
String str2 = new String("Hello, Java");
如果调用 String 类的无参构造方法,则会创建一个空字符串:
String str3 = new String();
此处的str3就是一个空字符串。
2.String类常用的API方法
1.获取字符串长度:int length()
2.获取指定位置字符:char charAt(int index)
String str = "I love Java"; char c = str.charAt(7); System.out.println("索引位置为7的字符为:" + c); // J
3.查找字符串位置:
1.indexOf() 获取字符或子串在字符串中第一次出现的位置。
String str = "I love Java, I love imooc!"; int i = str.indexOf('a'); System.out.println("字符a在字符串str第一次出现的位置为:" + i); // 8 int i = str.indexOf("love"); System.out.println("子串love在字符串str第一次出现的位置为:" + i); // 2
2.lasIndexOf() 获取字符或子串在字符串中最后一次出现的位置。
String str = "I love Java, I love imooc!"; int i = str.lastIndexOf('e'); System.out.println("字符e在字符串str最后一次出现的位置为:" + i); // 18 int i = str.lastIndexOf("I love"); System.out.println("字串I love在字符串str最后一次出现的位置为:" + i); // 13
注意:以上方法的参数都是区分大小写的。也就无法在I love Java中查找到字符E。如果没有查找,上述方法都会返回一个整型值:-1。
String str = "I love Java"; int i = str.indexOf('E'); System.out.println(i); // -1
4.字符串截取: substring()
1.String substring(int beginIndex) 获取从beginIndex位置开始到结束的子串。
2.String substring(int beginIndex, int endIndex) 获取从beginIndex位置开始到endIndex位置的子串(不包含endIndex位置字符)。
String str = "I love Java"; String substring = str.substring(2); String substring1 = str.substring(2, 6); System.out.println("从索引位置2到结束的子串为:" + substring); // love java System.out.println("从索引位置2到索引位置6的子串为:" + substring1); // love
5. 字符串切割
1.切割为字串数组:String[] split(String regex)
String str1 = "I love Java"; // 将字符串str1以空格分隔,并将分割结果赋值给strArr数组 String[] strArr = str1.split(" "); // 遍历数组,打印每一个元素 for (String str: strArr) { System.out.print(str + '\t'); }
注意,有几种特殊的分隔符:* ^ : | . \,要使用转义字符转义。
// 以*切割 String str2 = "I*love*Java"; String[] strArr2 = str2.split("\\*"); // 以\切割 String str3 = "I\\love\\Java"; String[] strArr4 = str3.split("\\\\"); // 以|切割 String str4 = "I|love|Java"; String[] strArr4 = str4.split("\\|");
2.切割为 byte 数组:getBytes()
在实际工作中,网络上的数据传输就是使用二进制字节数据。因此字符串和字节数组之间的相互转换也很常用。
public class Demo{ public static void main(String[] args) { String str2 = "我喜欢Java"; System.out.println("将字符串转换为byte数组:"); // 将字符串转换为字节数组 byte[] ascii = str2.getBytes(); // 遍历字节数组,打印每个元素 for (byte aByte : ascii) { System.out.print(aByte + "\t"); } } }
运行结果:
将字符串转换为byte数组:
-26 -120 -111 -27 -106 -100 -26 -84 -94 74 97 118 97
将字节数组转换为字符串的方法很简单,直接实例化一个字符串对象,将字节数组作为构造方法的参数即可:
// 此处的ascii为上面通过字符串转换的字节数组 String s = new String(ascii);
6.字符串大小写转换
1.toLowerCase() 将字符串转换为小写2.toUpperCase() 将字符串转换为大写
public class Demo { public static void main(String[] args) { String str = "HELLO world"; String s = str.toLowerCase(); System.out.println("字符串str为转换为小写后为:" + s); String s1 = s.toUpperCase(); System.out.println("字符串s为转换为大写后为:" + s1); } }
如果想把字符串HELLO world中的大小写字母互换,该如何实现呢?
public class Demo{ public static void main(String[] args) { String str = "HELLO world"; // 先切割为数组 String[] strArr = str.split(" "); // 将数组中元素转换大小写并连接为一个新的字符串 String result = strArr[0].toLowerCase() + " " + strArr[1].toUpperCase(); System.out.println("字符串str的大小写互换后为:" + result); } }
3.String类比较
public class Demo { public static void main(String[] args) { // 用两种方法创建三个内容相同的字符串 String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); System.out.println("使用equals()方法比较str1和str2的结果为:" + str1.equals(str2)); System.out.println("使用==运算符比较str1和str2的结果为:" + (str1 == str2)); System.out.println("使用equals()方法比较str1和str3的结果为:" + str1.equals(str3)); System.out.println("使用==运算符比较str1和str3的结果为:" + (str1 == str3)); } // 代码中三个字符串str1,str2和str3的内容都是hello,因此使用equals()方法对它们进行比较,其结果总是为true。 // 其中使用==运算符比较str1和str2的结果为true,但使用==运算符比较的str1和str3的结果为false。这是因为==运算符比较的是两个变量的地址而不是内容。 }
运行过程:
1. 当执行String str1 = "hello;"语句时,会在内存的栈空间中创建一个str1,在常量池中创建一个"hello",并将str1指向hello。

2.当执行String str2 = "hello";语句时,栈空间中会创建一个str2,由于其内容与str1相同,会指向常量池中的同一个对象。
所以str1与str2指向的地址是相同的,这就是==运算符比较str1和str2的结果为true的原因。

3. 当执行String str3 = new String("hello");语句时,使用了new关键字创建字符串对象,由于对象的实例化操作是在内存的堆空间进行的,此时会在栈空间创建一个str3,在堆空间实例化一个内容为hello的字符串对象,并将str3地址指向堆空间中的hello,这就是==运算符比较str1和str3的结果为false的原因。


浙公网安备 33010602011771号