### Java中高效实现字符串反转的几种方法
#### 1. 使用StringBuilder的reverse()方法
```java
public static String reverseWithStringBuilder(String str) {
return new StringBuilder(str).reverse().toString();
}
```
特点:代码简洁,执行效率高,适用于单线程环境。
#### 2. 使用字符数组手动反转
```java
public static String reverseWithCharArray(String str) {
char[] chars = str.toCharArray();
int left = 0, right = chars.length - 1;
while (left < right) {
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
return new String(chars);
}
```
特点:通过双指针原地交换,内存效率高,适合处理大型字符串。
#### 3. 使用递归实现
```java
public static String reverseRecursively(String str) {
if (str.length() <= 1) {
return str;
}
return reverseRecursively(str.substring(1)) + str.charAt(0);
}
```
特点:代码简洁但栈空间消耗大,适用于教学演示,不推荐处理长字符串。
#### 4. 使用Java 8 Stream API
```java
public static String reverseWithStream(String str) {
return IntStream.range(0, str.length())
.map(i -> str.charAt(str.length() - i - 1))
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
```
特点:函数式编程风格,适合现代Java开发,但性能略低于传统方法。
#### 5. 使用Apache Commons Lang库
```java
// 需添加依赖:org.apache.commons:commons-lang3
public static String reverseWithApacheCommons(String str) {
return StringUtils.reverse(str);
}
```
特点:依赖外部库,适合已使用该库的项目,代码最简洁。
#### 性能对比与选择建议
- 性能最优:StringBuilder.reverse()和字符数组方法
- 内存敏感:字符数组方法(避免创建临时对象)
- 代码简洁:StringBuilder.reverse()或Apache Commons Lang
- 函数式编程:Stream API实现
- 教学用途:递归实现(展示算法思维)
#### 注意事项
1. 处理null输入:所有方法应添加null检查
2. 考虑Unicode字符:确保方法支持代理对和特殊字符
3. 多线程环境:StringBuilder非线程安全,可使用StringBuffer
根据具体场景选择合适方法,常规开发推荐使用StringBuilder.reverse(),性能关键场景建议使用字符数组方法。
851

被折叠的 条评论
为什么被折叠?



