String类
String类基础
1、 代表字符串,使用一对“”引起来表示
2、 声明为final类,不可被继承
3、 String实现的接口
* Serializable接口:表示字符串是支持序列化的
* Comparable接口:表示String可以比较大小
4、 String内部定义了final char[] value用于存储字符串数据
5、 String代表一个不可变的字符序列(不可变性)
* 通过字面量的方式(区别于new方式)给一个字符串复制,此时的字符串值声明在字符串常量池中
* 字符串常量池中是不会存储相同内容的字符串的
* 体现
* 当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值
* 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能在原有的value进行赋值
* 当调用String.replace()方法修改指定的字符或字符串时,也必须重新指定内存区域赋值
6、 String实例化方式
* 通过字面量定义的方式
* 通过new + 构造器的方式
* 变量保存的是地址值,是数据在堆空间中开辟空间以后对应的地址值
7、 String字符串拼接
* 常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量
* 只要有一个是变量,结果就在堆中
* ⭕如果拼接的结果调用intern()方法,返回值就在常量池中
String类常用方法
1、 s.length():返回字符串的长度
String s = "abcdefg";//7
System.out.println(s.length());
2、 s.charAt(int index) :返回某索引处的字符
index属于数组长度范围
String s = "abcdefg";
System.out.println(s.charAt(3));//d
3、 s.isEmpty():判断是否是空字符串
String s = "abcdefg";
System.out.println(s.isEmpty());//false
4、 s.toLowerCase():将String中的所有字符转换为小写
String s = "ABCDEFG";
System.out.println(s.toLowerCase());//abcdefg
5、 s.toUpperCase():将String中的所有字符转换为大写
String s = "abcdefg";
System.out.println(s.toUpperCase());//ABCDEFG
6、 s.trim():返回字符串副本,忽略前导空白和尾部空白
String s = " ASDF GJ ";
System.out.println(s.trim());//ASDF GJ
7、 equals():比较字符串的内容是否相等
8、 s1.equalsIgnoreCase(s2):忽略大小写比较两者是否相等
String s1 = "asdfg";
String s2 = "ASDFG";
System.out.println(s1.equalsIgnoreCase(s2));//true
9、 s1.concat(“s2”):将指定字符串连接到此字符串的结尾,相当于用“+”
String s1 = "qwert";
System.out.println(s1.concat("+mnb"));//qwert+mnb
10、 s1.compareTo(s2):比较两个字符串的大小(无论哪种方式建的字符串都可以)
* 涉及到字符串排序
* 结果为负数代表前者小
* 结果为0代表两者相同
String s1 = "asd";
String s2 = "cvb";
System.out.println(s1.compareTo(s2));//-2
11、 String s2 = s16.substring(int index):返回一个新的字符串,它是此字符串从index开始截取到最后一个字符串
String s1 = "克里斯马殷阁下";
System.out.println(s1.substring(4));//殷阁下
12、 String s2 = s1.substring(int beginIndex, int endIndex):返回一个新的字符串,它是从beginIndex开始截取到endIndex(不包含)的一个子字符串(左闭右开)
String s1 = "克里斯马殷阁下";
System.out.println(s1.substring(0,4));//克里斯马
13、 boolean b = s1.endsWith(String suffix) :测试此字符串是否以指定的后缀结束
String s = "asdfg";
System.out.println(s.endsWith("g"));//true
14、 boolean b = s1.startsWith(String suffix):测试此字符串是否以指定的前缀开始
String s = "asdfg";
System.out.println(s.startsWith("a"));//true
15、 boolean b = s.startsWith(prefix,toffset):测试此字符串从指定的索引开始的子字符串是否与指定前缀开始
String s = "asdfg";
System.out.println(s.startsWith("df", 2));//true
16、 s1.contains(s2):此字符串包含指定的char值序列时,返回true
String s = "asdfg";
System.out.println(s.contains("sdf"));//true
System.out.println(s.contains("sf"));//false
17、 s.indexOf(String str):返回指定子字符串中第一次出现处的索引,不存在出现-1
String s = "asdfg";
System.out.println(s.indexOf("d"));//2
System.out.println(s.indexOf("b"));//-1
18、 s.indexOf(str,fromIndex):返回指定子字符串在此字符串中第一次出现的索引,从fromIndex开始查找
String s = "asdfgasdfg";
System.out.println(s.indexOf("d", 5));//7
19、 s.lastIndexOf(String str):返回指定的子字符串在此字符串中最右边出现处的索引(还是从前向后找,返回的索引也是从前往后数的索引)
String s = "asdfgasdfg";
System.out.println(s.lastIndexOf("f"));//8
* 什么情况indexOf(str)和lastIndexOf(str)返回值相同?
* str中的元素都只存在一个
* 不存在str
20、 str.lastIndexOf(str,fromIndex):返回指定的子字符串中最后一次出现处的索引,从指定的索引开始反向搜索(返回的索引值还是从前往后找得到的索引)
String s = "asdfgasdfg";
System.out.println(s.lastIndexOf("g", 5));//4
21、 s.replace(oldchar,newchar):返回一个新的字符串,用newchar替换oldchar(替换字符)
String s = "asdfgasdfg";
String replace = s.replace("as", "bn");
System.out.println(replace);//bndfgbndfg
22、 s.replace(target, replacement):返回一个新的字符串,replacement替换target
String s = "最好的队长殷志源";
String replace = s.replace("最好的队长", "丸子");
System.out.println(replace);//丸子殷志源
String与其他类型数据的转换
String与基本数据类型转换
- String类型—->包装类类型:调用包装类的parseXXX()方法
String s = "123";
int i = Integer.parseInt(s);
System.out.println(i);//123
- 包装类类型—->String类型:调用String类的valueOf()方法
double d = 2.6;
String s = String.valueOf(d);
System.out.println(s);
String类型与char[]类型转换
- String类型—->char[]类型:调用String的toCharArray()方法
String s = "abc";
char[] c = s.toCharArray();
System.out.println(Arrays.toString(c));//[a, b, c]
- char[]类型—->String类型:调用String构造器
char[] c = new char[]{'a','b','c'};
String s = new String(c);
System.out.println(s);//abc
String与byte[]类型转换
- String类型—->byte[]转换:调用String的getBytes()方法
- 使用utf-8进行编码
String s = "殷志源123";
byte[] b = s.getBytes();
System.out.println(Arrays.toString(b));//[-26, -82, -73, -27, -65, -105, -26, -70, -112, 49, 50, 51]
* 使用gbk字符集进行编码
String s = "殷志源123";
byte[] b = s.getBytes("gbk");
System.out.println(Arrays.toString(b));//[-46, -13, -42, -66, -44, -76, 49, 50, 51]
> 编码:字符串--->字节(能看的懂转换为看不懂的(计算机底层的二进制数据))
> 解码:字节------->字符串(编码的逆过程)
* byte[]类型—->String类型转换:调用String的构造器
在解码时,要求解码使用的解码集必须与编码时使用的字符集一致,否则会出现乱码
String s = "殷志源123";
byte[] b1 = s.getBytes();
System.out.println(Arrays.toString(b1));//[-26, -82, -73, -27, -65, -105, -26, -70, -112, 49, 50, 51]
String s1 = new String(b1);
System.out.println(s1);//殷志源123