一、String类
String类表示一个字符串。
String类是一个比较特殊的引用数据类型。在使用上比较像基本数据类型。
String str = “abc”;
字符串常量:”abc”,”文字”这些叫常量。有时也称字面量。
内存中有一块区域,常量池。在常量池有也有一个区域叫字符串常量池。
字符串常量都会保存到字符串常量池。
所以一个String类型的变量,使用一个常量时,可以不用new关键字实例化。因为字符串常量有位置放。
在字符串常量池中的常量,可以被多个字符串变量引用。
1.1字符串常量不变性
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2);//true
//字符串变量不可变
s1 = s1 + "d";
System.out.println(s1==s2);//false
}
1.2 构造方法
1 public String()
2 public String(String s)
3 public String(char[] value)
分配一个新的String,以便它表示当前包含在字符数组参数中的字符序列
4 public String(int[] value)
1.3 常用方法
1 public char charAt(int index)
返回char指定索引处的值。
2 public int compareTo(String anotherString)
按字典顺序比较两个字符串。
结果:
如果参数字符串等于此字符串,则值为0 ;
一个值小于0如果这个字符串的字典比字符串参数小;
如果此字符串的字典大小超过字符串参数,则值大于0 。
3 public String concat(String str)
将指定的字符串连接到该字符串的末尾。
4 public boolean contains(CharSequence s)
当且仅当此字符串包含指定的char值序列时才返回true。
参数
s - 搜索的顺序
结果
如果此字符串包含 s ,则为true,否则为false
5 public int indexOf(int ch)
返回指定字符第一次出现的字符串内的 索引。
6 public int lastIndexOf(int ch)
返回指定字符的最后一次出现的字符串中的索引。
7 public String substring(int beginIndex)
返回一个字符串,该字符串是此字符串的子字符串。
8 public String substring(int beginIndex,int endIndex)
返回一个字符串,该字符串是此字符串的子字符串。
参数
beginIndex - 开始索引,包括。
endIndex - 结束索引,不包括。
结果
指定的子字符串。
9 public String trim()
返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
1.4 给一个文件名,随即修改文件名称
public class FileUtils{
public static String getNewFile(String fileName);
}
调用:
String newFile = FileUtils.getNewFile(“play-2023.2.png”);
public class FileUtils {
public static String getNewFile(String fileName){
String name = UUIDUtils.getUUID();
return name + fileName.substring(fileName.lastIndexOf("."));
}
}
二、StringBuffer和StringBuilder
String类中有一个叫字符串常量不变性的特点。
一般操作String类时。+号的作用是二个字符串之间的拼接。
开发过程中,使用的不是特别多。使用+号进行拼接就可以了。
但是如果操作过程中,对String的修改非常多的话。效率就很低。
修改在String中加入一个字符,后面追加字符的。
在Java中提供了二个带有缓存功能的字符串处理的类。
StringBuffer和StringBuilder
2.1 StringBuffer类
StringBuffer 一个带有缓存 的String类。
StringBuffer表示了一个字符串的缓冲区。我们可以在这个字符串的缓冲区中对字符串进行操作。
当操作完成之后。再将StringBuffer转换成String类。
(1) 构造方法
public StringBuffer()
构造一个没有字符的字符串缓冲区,初始容量为16个字符。
public StringBuffer(String str)
构造一个初始化为指定字符串内容的字符串缓冲区。 字符串缓冲区的初始容量为16加上字符串参数的长度
StringBuffer stringBuffer = new StringBuffer("abc");
(2) 常用方法
1 public StringBuffer append(String str)
将指定的字符串附加到此字符序列。
stringBuffer.append("def").append("ghi").append("kkk");
2 public StringBuffer delete(int start, int end)
删除此序列的子字符串中的字符。
子串开始于指定start并延伸到字符索引end - 1 ,或如果没有这样的字符存在的序列的结束。
如果start等于end ,则不作任何更改。
参数
start - 开始索引,包括。
end - 结束索引,不包括。
3 public StringBuffer insert(int offset, String str)
将字符串插入到此字符序列中。
参数:
offset 插入字符串的索引位置
str 插入的字符串
4 public StringBuffer replace(int start, int end, String str)
用指定的String中的字符替换此序列的子字符串中的String 。
参数
start - 开始索引,包括。
end - 结束索引,独家。
str - 将替换以前内容的字符串。
5 public String toString()
返回表示此顺序中的数据的字符串
public static void main(String[] args) { StringBuffer stringBuffer = new StringBuffer("abc"); stringBuffer.append("def").append("ghi").append("kkk"); stringBuffer.delete(1,3);//删除bc stringBuffer.insert(1,"xxx");//axxxdefghikkk stringBuffer.replace(1,3,"???");//a???xdefghikkk String str = stringBuffer.toString();//将StringBuffer转换为String System.out.println(str); }
2.2 StringBuilder类
与StringBuffer一样的API。
StringBuffer是线程安全的。
StringBuilder是线程不安全的。