Java中StringBuffer的使用与操作
立即解锁
发布时间: 2025-08-18 02:26:17 阅读量: 2 订阅数: 17 

### Java 中 StringBuffer 的使用与操作
#### 1. StringBuffer 的基本操作
在 Java 中,`StringBuffer` 是一个非常有用的类,它允许我们对字符串进行动态的修改。当我们向 `StringBuffer` 对象追加值时,该值会被转换为其对应的字符串形式并添加到对象中。例如,布尔变量会以 `"true"` 或 `"false"` 的形式追加,而数值类型则以十进制字符串表示。
以下是一个简单的示例:
```java
StringBuffer buf = new StringBuffer("The number is ");
long number = 99L;
buf.append(number);
```
执行上述代码后,`buf` 包含的字符串为 `"The number is 99"`。我们还可以向 `StringBuffer` 对象追加常量,例如:
```java
buf.append(12.34);
```
此时,`buf` 包含的字符串变为 `"The number is 9912.34"`。
`append()` 方法有多种重载形式,除了可以追加基本数据类型外,还可以接受 `char[]` 类型的数组作为参数,将数组内容作为字符串追加到 `StringBuffer` 对象中。另外,还可以通过指定起始索引和元素数量来追加数组的子集。示例如下:
```java
char[] text = { 'i', 's', ' ', 'e', 'x', 'a', 'c', 't', 'l', 'y' };
buf.append(text, 2, 8);
```
执行该语句后,`buf` 包含的字符串为 `"The number is 9912.34 exactly"`。
可以追加到 `StringBuffer` 对象的类型如下表所示:
| 类型 |
| ---- |
| boolean |
| char |
| String |
| Object |
| int |
| long |
| float |
| double |
| byte |
| short |
| char[] |
#### 2. 查找子字符串的位置
我们可以使用 `indexOf()` 或 `lastIndexOf()` 方法在 `StringBuffer` 对象的缓冲区中查找给定的子字符串。其中,较简单的版本只需要一个参数,即要查找的字符串,该方法返回要搜索的字符串最后一次出现的起始索引位置(类型为 `int`)。如果未找到子字符串,则返回 `-1`。
示例代码如下:
```java
StringBuffer phrase = new StringBuffer("one two three four");
int position = phrase.lastIndexOf("three");
```
上述代码中,`position` 的值为 `8`,因为 `"three"` 最后一次出现的起始索引为 `8`。
`lastIndexOf()` 方法的另一个版本需要额外的参数来指定搜索的起始索引位置。例如:
```java
position = phrase.lastIndexOf("three", 8);
```
该语句从索引位置 `8` 开始向后搜索子字符串的第一个字符,即使 `"three"` 超出了索引位置 `8`,也会被找到并返回 `8`。
#### 3. 替换子字符串
使用 `replace()` 方法可以将 `StringBuffer` 对象中的连续字符序列替换为给定的字符串。替换字符串可以包含比被替换子字符串更多的字符,在这种情况下,字符串会根据需要进行扩展。
`replace()` 方法需要三个参数:前两个参数为 `int` 类型,分别指定要替换的子字符串的起始索引和结束索引的下一个位置;第三个参数为 `String` 类型,是要插入的字符串。
示例代码如下:
```java
StringBuffer phrase = new StringBuffer("one two three four");
String substring = "two";
String replacement = "twenty";
int position = phrase.lastIndexOf(substring);
phrase.replace(position, position + substring.length(), replacement);
```
执行上述代码后,`phrase` 的新内容为 `"one twenty three four"`。
#### 4. 插入字符串
要将字符串插入到 `StringBuffer` 对象中,可以使用 `insert()` 方法。该方法的第一个参数指定插入位置的索引。
示例如下:
```java
StringBuffer buf = new StringBuffer("Many hands make light work");
buf.insert(4, " old");
```
执行该语句后,`buf` 包含的字符串为 `"Many old hands make light work"`。
`insert()` 方法也有多种重载形式,第二个参数可以是与 `append()` 方法相同范围的类型。如果需要插入 `char[]` 数组的子集,可以调用接受四个参数的 `insert()` 方法:
```java
insert(int index, char[] str, int offset, int length)
```
该方法从指定的 `index` 位置开始插入 `str[]` 数组中从 `offset` 位置开始的 `length` 个字符的字符串表示。
#### 5. 提取字符
`StringBuffer` 类包含 `charAt()` 和 `getChars()` 方法,它们的工作方式与 `String` 类中同名方法相同。`charAt()` 方法用于提取指定索引位置的字符,`getChars()` 方法用于提取一定范围的字符并存储到 `char[]` 类型的数组中。
需要注意的是,`StringBuffer` 对象没有与 `getBytes()` 方法等效的方法,但可以通过调用 `toString()` 方法将 `StringBuffer` 对象转换为 `String` 对象,然后再调用 `getChars()` 方法获取对应的字节数组。
#### 6. 其他可变字符串操作
- **修改单个字符**:可以使用 `setCharAt()` 方法修改 `StringBuffer` 对象中的单个字符。示例如下:
```java
buf.setCharAt(3, 'Z');
```
该语句将字符串的第四个字符设置为 `'Z'`。
- **删除单个字符**:使用 `deleteCharAt()` 方法可以删除 `StringBuffer` 对象中指定索引位置的单个字符。示例如下:
```java
StringBuffer phrase = new StringBuffer("When the boats come in");
phrase.deleteCharAt(10);
```
执行上述代码后,`phrase` 包含的字符串为 `"When the bats come in"`。
- **删除多个字符**:使用 `delete()` 方法可以删除 `StringBuffer` 对象中的多个字符。该方法需要两个参数,分别指定要删除的第一个字符的索引和最后一个字符的下一个索引位置。示例如下:
```java
phrase.delete(5, 9);
```
该语句删除了 `phrase` 中的子字符串 `"the "`,使其内容变为 `"When bats come in"`。
- **反转字符串**:使用 `reverse()` 方法可以完全反转 `StringBuffer` 对象中字符的顺序。示例如下:
```java
StringBuffer palindrome = new StringBuffer("so many dynamos");
palindrome.reverse();
```
执行该语句后,`palindrome` 包含的字符串为 `"somanyd ynam os"`。
#### 7. 从 StringBuffer 对象创建 String 对象
我们可以使用 `StringBuffer` 类的 `toString()` 方法从 `StringBuffer` 对象创建 `String` 对象。该方法会创建一个新的 `String` 对象,并使用 `StringBuffer` 对象中包含的字符串进行初始化。
示例代码如下:
```java
String saying = proverb.toString();
```
在 Java 中,编译器会广泛使用 `toString()` 方法和 `append()` 方法来实现 `String` 对象的拼接。例如,当我们编写如下语句时:
```java
String str1 = "Many", str2 = " hands", str3 = " make", str4 = " light", str5 = " work.";
String saying = str1 + str2 + str3 + str4 + str5;
```
编译器会将其实现为:
```java
String saying = new StringBuffer().append
```
0
0
复制全文
相关推荐









