简介
String 是一组字符组成的数据整体。用双引号括起来。
字符串类的全名是 java.lang.String
在 java 中,字符串也是对象。
字符串是按照字节存储的。
在字符串中,可以使用反斜线对特殊字符进行转义。
常用的转义字符有 \', \", \t, \n, \\
// 两种写法都行
String name1 = "jack"; // 对于这种写法,JVM 自动做了很多优化,比如如果多个变量的值是同一个字符串,它们会指向同一个内存空间。
String name2 = new String("rose");
// 第三种写法:char 数组生成字符串
char[] c = {'a', 'b', '中', 'c'};
String name3 = new String(c);
System.out.println(name3); // ab中c
字符串的拼接
- 加 + 号
- concat 方法
String s1 = "a" + "b";
String s2 = "ab";
System.out.println(s1.hashCode()); // 3105
System.out.println(s2.hashCode()); // 3105
// 只要 + 号两侧,任意一个是字符串,就会进行字符串的拼接
String s3 = 1 + "abc";
s1 = s1.concat("ccc");
System.out.println(s3); // 1abc
System.out.println(s1); // abccc
字符串的比较
- 是否相等:equals, equalsIgnoreCase
- 比较大小
- compareTo (正数,左边的大;负数,左边的小;0 相等)
- compareToIgnoreCase
String s4 = "Ab";
System.out.println(s2.equals(s4)); // false
System.out.println(s2.equalsIgnoreCase(s4)); // true
System.out.println(s2.compareTo(s4)); // 32,因为 a 的 ASCII 码是 97,而 A 的是 65
System.out.println(s2.compareToIgnoreCase(s4)); // 0
字符串的截取
- substring 第一个参数表示起始位置(包含它)的索引,第二个参数表示结束位置(不包含它)的索引。(左闭右开)
- split 按照指定的分隔符,对字符串进行拆分
- trim 剪掉字符串两端的空白字符
System.out.println(s1.substring(0, 4)); // abcc
字符串的替换
- replace 将旧子串全部替换为新子串
- replaceAll 按照指定的多个规则,将多个不同的旧子串替换为新子串
String s = "hello_world_hello";
System.out.println(s.replace("hello", "hi")); // hi_world_hi
System.out.println(s.replaceAll("hello|world", "hi")); // hi_hi_hi
字符串的大小写转换
- toLowerCase
- toUpperCase
String s5 = "helloWorld";
System.out.println(s5.toLowerCase()); // helloworld
System.out.println(s5.toUpperCase()); // HELLOWORLD
System.out.println(s5); // helloWorld
字符串的查找
- indexOf 获取子串第一次出现的位置(索引)
- lastIndexOf 获取子串最后一次出现的位置(索引)
- charAt 获取指定位置的字符
- contains 判断是否包含子串
- startsWith 判断是否以子串开头
- endsWith 判断是否以子串结尾
- isEmpty 判断是否为空字符串
System.out.println(s.indexOf("hello")); // 0
System.out.println(s.lastIndexOf("hello")); // 12
System.out.println(s.charAt(0)); // h
System.out.println(s.contains("hello")); // true
System.out.println(s.startsWith("hello")); // true
System.out.println(s.endsWith("hello")); // true
System.out.println("".isEmpty()); // true
System.out.println(" ".isEmpty()); // false
字符串的高效创建和使用
StringBuilder 类用于创建 StringBuilder 类型的字符串对象。
StringBuilder 对象的字符串操作会改变字符串本身,也就是说操作的是同一个字符串,不会额外开辟空间存储新的字符串。
// StringBuilder 创建字符串
// 它的方法会改变字符串对象本身
StringBuilder s6 = new StringBuilder();
for (int i = 0; i < 10; i++) {
s6.append(i);
}
System.out.println(s6); // 0123456789
System.out.println(s6.length()); // 10
System.out.println(s6.reverse()); // 9876543210
System.out.println(s6.insert(2, "aa")); // 98aa76543210
System.out.println(s6.toString()); // 98aa76543210