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

浙公网安备 33010602011771号