面试题:Java 如何将字符串反转 ?

在 Java 中,字符串反转是一个常见的操作。以下是几种常用的方法来实现字符串反转:


1. 使用 StringBuilder 或 StringBuffer

  • StringBuilder 和 StringBuffer 都提供了 reverse() 方法,可以方便地反转字符串。
  • StringBuilder 是非线程安全的,性能更高;StringBuffer 是线程安全的,性能稍低。
  • 示例
    String str = "Hello, World!";
    StringBuilder sb = new StringBuilder(str);
    String reversedStr = sb.reverse().toString();
    System.out.println(reversedStr); // 输出:!dlroW ,olleH

2. 使用字符数组

  • 将字符串转换为字符数组,然后通过交换字符的位置实现反转。
  • 示例
    String str = "Hello, World!";
    char[] charArray = str.toCharArray();
    int left = 0;
    int right = charArray.length - 1;
    while (left < right) {
        // 交换字符
        char temp = charArray[left];
        charArray[left] = charArray[right];
        charArray[right] = temp;
        left++;
        right--;
    }
    String reversedStr = new String(charArray);
    System.out.println(reversedStr); // 输出:!dlroW ,olleH

3. 使用递归

  • 通过递归方法实现字符串反转。
  • 示例
    public class StringReverse {
        public static String reverse(String str) {
            if (str.isEmpty()) {
                return str;
            }
            return reverse(str.substring(1)) + str.charAt(0);
        }
    
        public static void main(String[] args) {
            String str = "Hello, World!";
            String reversedStr = reverse(str);
            System.out.println(reversedStr); // 输出:!dlroW ,olleH
        }
    }

4. 使用 Java 8 的 Stream API

  • 利用 Java 8 的 Stream API 实现字符串反转。
  • 示例
    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    
    public class StringReverse {
        public static String reverse(String str) {
            return IntStream.range(0, str.length())
                    .mapToObj(i -> str.charAt(str.length() - 1 - i))
                    .map(String::valueOf)
                    .collect(Collectors.joining());
        }
    
        public static void main(String[] args) {
            String str = "Hello, World!";
            String reversedStr = reverse(str);
            System.out.println(reversedStr); // 输出:!dlroW ,olleH
        }
    }

5. 使用 Collections.reverse()

  • 将字符串转换为字符列表,然后使用 Collections.reverse() 方法反转列表。
  • 示例
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class StringReverse {
        public static String reverse(String str) {
            List<Character> charList = new ArrayList<>();
            for (char c : str.toCharArray()) {
                charList.add(c);
            }
            Collections.reverse(charList);
            StringBuilder sb = new StringBuilder();
            for (char c : charList) {
                sb.append(c);
            }
            return sb.toString();
        }
    
        public static void main(String[] args) {
            String str = "Hello, World!";
            String reversedStr = reverse(str);
            System.out.println(reversedStr); // 输出:!dlroW ,olleH
        }
    }

总结

以下是几种常见的字符串反转方法及其特点:

方法优点缺点
StringBuilder.reverse()简单高效,推荐使用
字符数组交换不依赖额外类库代码稍多
递归代码简洁性能较差,可能导致栈溢出
Java 8 Stream API函数式编程风格性能较低
Collections.reverse()使用集合工具类代码较多,性能较低

在实际开发中,推荐使用 StringBuilder 或 StringBuffer 的 reverse() 方法,因为它们简单、高效且易于理解。

THE END
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容