前言
String类,StringBuilder类,StringBuffer类都是java提供的定义字符串的类,下面是三种字符串类的异同介绍
String类:String类表示的字符串是是常量,一旦创建内容和长度都无法修改
StringBuilder类:StringBuilder类表示字符容器,创建后内容和长度可以随时修改,该类中方法没有实现线程安全
StringBuffer类:StringBuffer类表示字符容器,创建后内容和长度可以随时修改,该类中的方法实现了线程安全
总结:StringBuilder类和StringBuffer类相比基本功能一致,但由于前者未实现线程安全,较后者具有了更强的性能;当我们在进行字符串操作时,如果该字符串仅仅用于数据类型的表示,选择String类即可,如果需要对字符串进行增加,删除操作,优先选择StringBuilder类和StringBuffer类,具体如果有大量字符串需要处理且不要求线程安全,优先考虑StringBuilder类,如果要求线程安全那优先选择StringBuffer类
String类
String类的包括String类的初始化和String中的方法学习
String类的初始化
由于String类创建的对象是字符串常量,所以对象一旦创建就不可以对其进行改变,如果我们给已赋值的对象重新赋值,系统会优先在字符长常量池中进行检索相应字符串,若找到,则直接指向该字符串常量的地址,若没找到,则在字符长常量池中分配一块空间存储该字符串,并让该对象直接指向该空间的地址
其相应的构造方法有:
实际操作中会根据输入的值的类型选择相应的构造方法
String类的常用方法
1. **构造方法**:
* `String()`: 创建一个新的空字符串。
* `String(byte[] bytes)`: 通过字节数组创建字符串。
* `String(byte[] bytes, int offset, int length)`: 通过字节数组的一部分创建字符串。
* `String(char[] value)`: 通过字符数组创建字符串。
* `String(char[] value, int offset, int count)`: 通过字符数组的一部分创建字符串。
2. **长度方法**:
* `int length()`: 返回字符串的长度。
3. **比较方法**:
* `int compareTo(String anotherString)`: 按字典顺序比较两个字符串。
* `boolean equals(Object anObject)`: 比较此字符串与指定对象是否相等。
* `boolean equalsIgnoreCase(String anotherString)`: 按字典顺序比较两个字符串,不考虑大小写。
* `int compareToIgnoreCase(String str)`: 按字典顺序比较两个字符串,不考虑大小写。
4. **查找方法**:
* `int indexOf(int ch)`: 返回指定字符在字符串中首次出现的索引。
* `int indexOf(int ch, int fromIndex)`: 从指定索引处开始,返回指定字符在字符串中首次出现的索引。
* `int indexOf(String str)`: 返回指定子字符串在字符串中首次出现的索引。
* `int indexOf(String str, int fromIndex)`: 从指定索引处开始,返回指定子字符串在字符串中首次出现的索引。
* `lastIndexOf(int ch)`: 返回指定字符在字符串中最后一次出现的索引。
* `lastIndexOf(int ch, int fromIndex)`: 从指定索引处开始反向搜索,返回指定字符在字符串中最后一次出现的索引。
* `lastIndexOf(String str)`: 返回指定子字符串在字符串中最后一次出现的索引。
* `lastIndexOf(String str, int fromIndex)`: 从指定索引处开始反向搜索,返回指定子字符串在字符串中最后一次出现的索引。
5. **获取子字符串**:
* `String substring(int beginIndex)`: 返回一个新的字符串,它是此字符串的一个子字符串。
* `String substring(int beginIndex, int endIndex)`: 返回一个新字符串,它是此字符串的一个子字符串。
6. **替换方法**:
* `String replace(char oldChar, char newChar)`: 返回一个新的字符串,它是通过用新字符替换此字符串中的所有旧字符得到的。
* `String replace(CharSequence target, CharSequence replacement)`: 使用指定的字面值替换序列替换此字符串中所有指定的字面值目标序列。
7. **转换方法**:
* `char[] toCharArray()`: 将此字符串转换为一个新的字符数组。
* `byte[] getBytes()`: 使用平台的默认字符集将此 `String` 编码为字节序列,并将结果存储在新的字节数组中。
* `byte[] getBytes(String charsetName)`: 使用指定的字符集将此 `String` 编码为字节序列,并将结果存储在新的字节数组中。
8. **其他方法**:
* `String trim()`: 返回字符串的副本,忽略前导空白和尾部空白。
* `boolean startsWith(String prefix)`: 测试此字符串是否以指定的前缀开始。
* `boolean endsWith(String suffix)`: 测试此字符串是否以指定的后缀结束。
* `int hashCode()`: 返回字符串的哈希码。
* `String toLowerCase()`: 使用默认语言环境的规则将此 `String` 中的所有字符转换为小写。
* `String toUpperCase()`: 使用默认语言环境的规则将此 `String` 中的所有字符转换为大写。
* `String concat(String str)`: 将指定的字符串连接到此字符串的结尾。
这只是String类中提供的一些常用方法。实际上,String类提供了许多其他有用的方法和常量,可以在 Java 官方文档中找到完整的方法列表和详细说明。
Stringbuffer类
StringBuffer类在 Java 中用于表示可变的字符串。与String类不同,StringBuffer类的对象可以被修改,而不会生成新的对象。这使得StringBuffer在需要频繁修改字符串的场合更加高效。
以下是 `StringBuffer` 类中的一些常用方法:
1. **构造方法**:
* `StringBuffer()`: 构造一个空字符串缓冲区,初始容量为 16 个字符。
* `StringBuffer(int capacity)`: 构造一个指定容量的空字符串缓冲区。
* `StringBuffer(String str)`: 构造一个包含指定字符串内容的字符串缓冲区。
2. **追加内容**:
* `StringBuffer append(Object obj)`: 将指定的对象追加到此序列。
* `StringBuffer append(String str)`: 将指定的字符串追加到此序列。
* `StringBuffer append(char c)`: 将指定的字符追加到此序列。
* 其他重载的 `append` 方法,可以追加不同类型的参数。
3. **插入内容**:
* `StringBuffer insert(int offset, Object obj)`: 将指定对象插入此序列的指定位置。
* `StringBuffer insert(int offset, String str)`: 将指定字符串插入此序列的指定位置。
* `StringBuffer insert(int offset, char c)`: 将指定字符插入此序列的指定位置。
4. **删除内容**:
* `StringBuffer delete(int start, int end)`: 移除此序列的一个子字符串。
* `StringBuffer deleteCharAt(int index)`: 移除指定位置的字符。
5. **替换内容**:
* `StringBuffer replace(int start, int end, String str)`: 使用给定字符串替换此序列的一个子字符串。
6. **反转内容**:
* `StringBuffer reverse()`: 将此字符序列反转。
7. **设置字符**:
* `void setCharAt(int index, char ch)`: 将给定索引处的字符设置为 `ch`。
8. **截取子序列**:
* `StringBuffer substring(int start)`: 返回一个新的字符串缓冲区,它包含此序列当前内容的一个子序列。
* `StringBuffer substring(int start, int end)`: 返回一个新的字符串缓冲区,它包含此序列当前内容的一个子序列。
9. **长度和容量**:
* `int length()`: 返回长度(字符数)。
* `int capacity()`: 返回当前容量。
10. **改变容量**:
* `void ensureCapacity(int minimumCapacity)`: 确保容量至少等于指定的最小值。
* `void setLength(int newLength)`: 设置字符序列的长度。
11. **比较**:
* `boolean equals(Object anObject)`: 比较此字符串缓冲区与指定的对象是否相等。
12. **其他**:
* `String toString()`: 返回此序列中数据的字符串表示形式。
* `void capacity(int newCapacity)`: 调整此序列的容量。
这些只是 `StringBuffer` 类中提供的一些常用方法。实际上,`StringBuffer` 类提供了更多的方法和功能,可以在 Java 官方文档中找到完整的方法列表和详细说明。需要注意的是,由于StringBuffer 是线程安全的,因此它的某些操作可能比 StringBuilder慢,后者在单线程环境下是首选,因为它更快
一些注意:
每个字符串常量都可以