标题:10种Java字符串反转方法详解:从基础实现到性能优化指南
引言
Java里字符串反转常用;比如文本处理、算法改进、数据加密等。本文根据1-18技术资料,解析10种方案,考虑时间、内存、编码,助开发者选最优。
目录
基础实现方案
字符数组交换法
StringBuilder/StringBuffer内置方法
递归与分治策略
栈结构与集合工具
性能对比与场景适配
一、基础实现方案
1. StringBuilder.reverse 方法
String str = "hello";
String reversed = new StringBuilder(str).reverse.toString; // 输出"olleh"
特点:时间复杂度O(n),JDK原生API效率最高,但无法处理Unicode代理对1。
2. 字符数组交换法
public static String reverseByCharArray(String str) {
char[] arr = str.toCharArray;
int left = 0, right = arr.length - 1;
while (left < right) {
char temp = arr[left];
arr[left++] = arr[right];
arr[right--] = temp;
}
return new String(arr);
}
优势:适用于部分字符串反转(如"abcde"→"abedc")6,支持自定义索引区间操作。
二、进阶优化方案
3. 递归反转法
public static String reverseRecursive(String str) {
return (str.isEmpty) ? str : reverseRecursive(str.substring) + str.charAt;
}
局限:栈深度限制导致StackOverflow风险,时间复杂度O(n2),仅适合小数据量10。
4. 栈结构FILO特性
Stack<Character> stack = new Stack<>;
for (char c : str.toCharArray) stack.push(c);
StringBuilder sb = new StringBuilder;
while (!stack.isEmpty) sb.append(stack.pop);
应用场景:中间操作状态要保留;例如解析表达式。
三、特殊场景处理
5. 保留单词顺序反转
输入"I love Java"→"Java love I":
String[] words = str.split("\\s+");
Collections.reverse(Arrays.asList(words));
return String.join(" ", words);
注意:需处理连续空格和标点6。
6. 多字节字符安全处理
使用
codePoint
方法遍历Unicode码点,避免拆散代理对:
IntStream codePoints = str.codePoints.toArray;
return new StringBuilder(new String(codePoints, 0, codePoints.length))
.reverse.toString;
四、性能对比与选型建议
StringBuilder
O(n)
O(n)
通用场景
字符数组交换
O(n)
O(n)
部分反转或内存敏感场景
递归
O(n2)
O(n)
小数据量练习
栈
O(n)
O(n)
需中间状态存储
SEO优化总结
标题关键词:Java字符串反转、性能优化、Unicode处理
内容策略:高频词布局(如"反转方法"、"时间复杂度")、结构化段落、代码块增强专业度。建议在技术社区(如CSDN5-18)发布时添加标签#Java基础 #算法优化。
运用这些方法,开发者能反转字符串;实现高效又安全,在不同场合下。要完整代码,可以看10里给出的9个实现方式。