字符串
1. 字符串
1.1 字符串概述和特点
java.lang.String类代表字符串。
API当中说:Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
其实就是说:程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。)
字符串的特点:
- 字符串的内容永不可变。【重点】
- 正是因为字符串不可改变,所以字符串是可以共享使用的。
- 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。
1.2字符串的构造方法和直接创建
创建字符串的常见3+1种方式。
三种构造方法:
public String():创建一个空白字符串,不含有任何内容。
public String(char[] array):根据字符数组的内容,来创建对应的字符串。
public String(byte[] array):根据字节数组的内容,来创建对应的字符串。
一种直接创建:
String str = "Hello"; // 右边直接用双引号
注意:直接写上双引号,就是字符串对象。
1.2.1 案例代码一
1 /* 2 java.lang.String类代表字符串。 3 API当中说:Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 4 其实就是说:程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。) 5 6 字符串的特点: 7 1. 字符串的内容永不可变。【重点】 8 2. 正是因为字符串不可改变,所以字符串是可以共享使用的。 9 3. 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。 10 11 创建字符串的常见3+1种方式。 12 三种构造方法: 13 public String():创建一个空白字符串,不含有任何内容。 14 public String(char[] array):根据字符数组的内容,来创建对应的字符串。 15 public String(byte[] array):根据字节数组的内容,来创建对应的字符串。 16 一种直接创建: 17 String str = "Hello"; // 右边直接用双引号 18 19 注意:直接写上双引号,就是字符串对象。 20 */ 21 public class Demo01String { 22 23 public static void main(String[] args) { 24 // 使用空参构造 25 String str1 = new String(); // 小括号留空,说明字符串什么内容都没有。 26 System.out.println("第1个字符串:" + str1); 27 28 // 根据字符数组创建字符串 29 char[] charArray = { 'A', 'B', 'C' }; 30 String str2 = new String(charArray); 31 System.out.println("第2个字符串:" + str2); 32 33 // 根据字节数组创建字符串 34 byte[] byteArray = { 97, 98, 99 }; 35 String str3 = new String(byteArray); 36 System.out.println("第3个字符串:" + str3); 37 38 // 直接创建 39 String str4 = "Hello"; 40 System.out.println("第4个字符串:" + str4); 41 } 42 }
1.3字符串常量池
字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。
对于基本类型来说,==是进行数值的比较。
对于引用类型来说,==是进行【地址值】的比较。
1.3.1案例代码二
1 /* 2 字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。 3 4 对于基本类型来说,==是进行数值的比较。 5 对于引用类型来说,==是进行【地址值】的比较。 6 */ 7 public class Demo02StringPool { 8 9 public static void main(String[] args) { 10 String str1 = "abc"; 11 String str2 = "abc"; 12 13 char[] charArray = {'a', 'b', 'c'}; 14 String str3 = new String(charArray); 15 16 System.out.println(str1 == str2); // true 17 System.out.println(str1 == str3); // false 18 System.out.println(str2 == str3); // false 19 } 20 }
1.4常见方法
1.4.1字符串的比较相关方法
=是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true;否则返回false。
注意事项:1. 任何对象都能用Object进行接收。
2. equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。
3. 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
推荐:"abc".equals(str) 不推荐:str.equals("abc")
public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。
1.4.1.1案例代码三
1 /* 2 ==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法: 3 4 public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true;否则返回false。 5 注意事项: 6 1. 任何对象都能用Object进行接收。 7 2. equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。 8 3. 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。 9 推荐:"abc".equals(str) 不推荐:str.equals("abc") 10 11 public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。 12 */ 13 public class Demo01StringEquals { 14 15 public static void main(String[] args) { 16 String str1 = "Hello"; 17 String str2 = "Hello"; 18 char[] charArray = {'H', 'e', 'l', 'l', 'o'}; 19 String str3 = new String(charArray); 20 21 System.out.println(str1.equals(str2)); // true 22 System.out.println(str2.equals(str3)); // true 23 System.out.println(str3.equals("Hello")); // true 24 System.out.println("Hello".equals(str1)); // true 25 26 String str4 = "hello"; 27 System.out.println(str1.equals(str4)); // false 28 System.out.println("================="); 29 30 String str5 = null; 31 System.out.println("abc".equals(str5)); // 推荐:false 32 // System.out.println(str5.equals("abc")); // 不推荐:报错,空指针异常NullPointerException 33 System.out.println("================="); 34 35 String strA = "Java"; 36 String strB = "java"; 37 System.out.println(strA.equals(strB)); // false,严格区分大小写 38 System.out.println(strA.equalsIgnoreCase(strB)); // true,忽略大小写 39 40 // 注意,只有英文字母区分大小写,其他都不区分大小写 41 System.out.println("abc一123".equalsIgnoreCase("abc壹123")); // false 42 } 43 }
1.4.2字符串的获取相关方法
String当中与获取相关的常用方法有:
public int length():获取字符串当中含有的字符个数,拿到字符串长度。
public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。
public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。)
public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
1.4.2.1案例代码四
1 /* 2 String当中与获取相关的常用方法有: 3 4 public int length():获取字符串当中含有的字符个数,拿到字符串长度。 5 public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。 6 public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。) 7 public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。 8 */ 9 public class Demo02StringGet { 10 11 public static void main(String[] args) { 12 // 获取字符串的长度 13 int length = "asdasfeutrvauevbueyvb".length(); 14 System.out.println("字符串的长度是:" + length); 15 16 // 拼接字符串 17 String str1 = "Hello"; 18 String str2 = "World"; 19 String str3 = str1.concat(str2); 20 System.out.println(str1); // Hello,原封不动 21 System.out.println(str2); // World,原封不动 22 System.out.println(str3); // HelloWorld,新的字符串 23 System.out.println("=============="); 24 25 // 获取指定索引位置的单个字符 26 char ch = "Hello".charAt(1); 27 System.out.println("在1号索引位置的字符是:" + ch); 28 System.out.println("=============="); 29 30 // 查找参数字符串在本来字符串当中出现的第一次索引位置 31 // 如果根本没有,返回-1值 32 String original = "HelloWorldHelloWorld"; 33 int index = original.indexOf("llo"); 34 System.out.println("第一次索引值是:" + index); // 2 35 36 System.out.println("HelloWorld".indexOf("abc")); // -1 37 38 System.out.println("=============="); 39 String str = "hello"; 40 str.concat("world"); 41 System.out.println(str); 42 } 43 }
1.4.3 字符串的截取方法
字符串的截取方法:
public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。
public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串。
备注:[begin,end),包含左边,不包含右边。
1.4.3.1案例代码五
1 /* 2 字符串的截取方法: 3 4 public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。 5 public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串。 6 备注:[begin,end),包含左边,不包含右边。 7 */ 8 public class Demo03Substring { 9 10 public static void main(String[] args) { 11 String str1 = "HelloWorld"; 12 String str2 = str1.substring(5); 13 System.out.println(str1); // HelloWorld,原封不动 14 System.out.println(str2); // World,新字符串 15 System.out.println("================"); 16 17 String str3 = str1.substring(4, 7); 18 System.out.println(str3); // oWo 19 System.out.println("================"); 20 21 // 下面这种写法,字符串的内容仍然是没有改变的 22 // 下面有两个字符串:"Hello","Java" 23 // strA当中保存的是地址值。 24 // 本来地址值是Hello的0x666, 25 // 后来地址值变成了Java的0x999 26 String strA = "Hello"; 27 System.out.println(strA); // Hello 28 strA = "Java"; 29 System.out.println(strA); // Java 30 } 31 }
1.4.4
1.1.1 字符串的转换相关方法
String当中与转换相关的常用方法有:
public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。
public byte[] getBytes():获得当前字符串底层的字节数组。
public String replace(CharSequence oldString, CharSequence newString):
将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。
备注:CharSequence意思就是说可以接受字符串类型。
1.4.4.1案例代码六
1 /* 2 String当中与转换相关的常用方法有: 3 4 public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。 5 public byte[] getBytes():获得当前字符串底层的字节数组。 6 public String replace(CharSequence oldString, CharSequence newString): 7 将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。 8 备注:CharSequence意思就是说可以接受字符串类型。 9 */ 10 public class Demo04StringConvert { 11 12 public static void main(String[] args) { 13 // 转换成为字符数组 14 char[] chars = "Hello".toCharArray(); 15 System.out.println(chars[0]); // H 16 System.out.println(chars.length); // 5 17 System.out.println("=============="); 18 19 // 转换成为字节数组 20 byte[] bytes = "abc".getBytes(); 21 for (int i = 0; i < bytes.length; i++) { 22 System.out.println(bytes[i]); 23 } 24 System.out.println("=============="); 25 26 // 字符串的内容替换 27 String str1 = "How do you do?"; 28 String str2 = str1.replace("o", "*"); 29 System.out.println(str1); // How do you do? 30 System.out.println(str2); // H*w d* y*u d*? 31 System.out.println("=============="); 32 33 String lang1 = "会不会玩儿呀!你大爷的!你大爷的!你大爷的!!!"; 34 String lang2 = lang1.replace("你大爷的", "****"); 35 System.out.println(lang2); // 会不会玩儿呀!****!****!****!!! 36 } 37 }
1.4.5 字符串的分割方法
分割字符串的方法:
public String[] split(String regex):按照参数的规则,将字符串切分成为若干部分。
注意事项:
split方法的参数其实是一个“正则表达式”,今后学习。
今天要注意:如果按照英文句点“.”进行切分,必须写"\\."(两个反斜杠)
1.4.5.1案例代码七
1 /* 2 分割字符串的方法: 3 public String[] split(String regex):按照参数的规则,将字符串切分成为若干部分。 4 5 注意事项: 6 split方法的参数其实是一个“正则表达式”,今后学习。 7 今天要注意:如果按照英文句点“.”进行切分,必须写"\\."(两个反斜杠) 8 */ 9 public class Demo05StringSplit { 10 11 public static void main(String[] args) { 12 String str1 = "aaa,bbb,ccc"; 13 String[] array1 = str1.split(","); 14 for (int i = 0; i < array1.length; i++) { 15 System.out.println(array1[i]); 16 } 17 System.out.println("==============="); 18 19 String str2 = "aaa bbb ccc"; 20 String[] array2 = str2.split(" "); 21 for (int i = 0; i < array2.length; i++) { 22 System.out.println(array2[i]); 23 } 24 System.out.println("==============="); 25 26 String str3 = "XXX.YYY.ZZZ"; 27 String[] array3 = str3.split("\\."); 28 System.out.println(array3.length); // 0 29 for (int i = 0; i < array3.length; i++) { 30 System.out.println(array3[i]); 31 } 32 } 33 }