2021-06-05 04:27:47
在 Java 中,反转字符串可以通过多种方法实现,以下是六种常见方式的详细说明及代码示例:
1. 使用 StringBuilder原理:StringBuilder 是可变字符序列,直接调用其 reverse() 方法即可反转字符串。代码:
String original = "Hello World";String reversed = new StringBuilder(original).reverse().toString();System.out.println(reversed); // 输出 "dlroW olleH"优点:简洁高效,推荐使用。
2. 使用字符数组(CharArray)原理:将字符串转为字符数组,通过交换首尾字符实现反转。代码:
String original = "Hello World";char[] chars = original.toCharArray();for (int i = 0; i < chars.length / 2; i++) { char temp = chars[i]; chars[i] = chars[chars.length - 1 - i]; chars[chars.length - 1 - i] = temp;}String reversed = new String(chars);System.out.println(reversed); // 输出 "dlroW olleH"优点:无需额外依赖,适合理解底层逻辑。
3. 使用 Collections.reverse()原理:将字符拆分为 List,利用 Collections.reverse() 反转列表后重新拼接。代码:
String original = "Hello World";List<Character> list = new ArrayList<>();for (char c : original.toCharArray()) { list.add(c);}Collections.reverse(list);StringBuilder reversed = new StringBuilder();for (char c : list) { reversed.append(c);}System.out.println(reversed.toString()); // 输出 "dlroW olleH"注意:此方法效率较低,因涉及多次对象创建。
4. 使用迭代器原理:通过迭代器遍历列表,逐个将字符插入列表头部实现反转。代码:
String original = "Hello World";List<Character> list = new ArrayList<>();for (char c : original.toCharArray()) { list.add(c);}Iterator<Character> it = list.iterator();while (it.hasNext()) { char c = it.next(); it.remove(); list.add(0, c); // 插入到头部}StringBuilder reversed = new StringBuilder();for (char c : list) { reversed.append(c);}System.out.println(reversed.toString()); // 输出 "dlroW olleH"缺点:代码复杂,性能较差。
5. 使用位运算符(异或交换)原理:利用异或运算交换字符数组中的元素,避免使用临时变量。代码:
String original = "Hello World";char[] chars = original.toCharArray();int n = chars.length;for (int i = 0; i < n / 2; i++) { chars[i] ^= chars[n - 1 - i]; chars[n - 1 - i] ^= chars[i]; chars[i] ^= chars[n - 1 - i];}String reversed = new String(chars);System.out.println(reversed); // 输出 "dlroW olleH"注意:位运算可读性较差,仅作为技巧展示。
6. 使用递归原理:通过递归将字符串拆分为首字符和剩余部分,反向拼接。代码:
public static String reverseRecursively(String str) { if (str == null || str.length() <= 1) { return str; } return reverseRecursively(str.substring(1)) + str.charAt(0);}String original = "Hello World";String reversed = reverseRecursively(original);System.out.println(reversed); // 输出 "dlroW olleH"缺点:递归深度过大可能导致栈溢出,不适合长字符串。
总结根据实际需求选择合适的方法即可。