Java实现字符串反转

将一个字符串进行反转

https://www.cnblogs.com/binye-typing/p/9260994.html

package com.interview.algorithm;

public class StringReverse {
    // StringBuffer
    public static String reverse1(String str) {
        return new StringBuilder(str).reverse().toString();
    }
    // toCharArray 逆向
    public static String reverse2(String str) {
        char[] chars = str.toCharArray();
        String reverse = "";
        for (int i = chars.length - 1; i >= 0; i--) {
            reverse += chars[i];
        }
        return reverse;
    }
    // charAt  正向
    public static String reverse3(String str) {
        String reverse = "";
        int length = str.length();
        for (int i = 0; i < length; i++) {
            reverse = str.charAt(i) + reverse;
        }
        return reverse;
    }
    public static void main(String[] args) {
        String s = "cf_wu";
        System.out.println(reverse1(s));
        System.out.println(reverse2(s));
        System.out.println(reverse3(s));

    }
}

 

### Java实现字符串反转的方法 Java中可以通过多种方式实现字符串反转。以下是几种常见的方法及其代码示例: #### 方法一:使用 `StringBuilder` 的 `reverse()` 方法 `StringBuilder` 是一个可变的字符序列,其内置的 `reverse()` 方法可以直接用于反转字符串。 ```java public class ReverseStringExample { public static void main(String[] args) { String original = "Hello, World!"; StringBuilder sb = new StringBuilder(original); String reversed = sb.reverse().toString(); System.out.println(reversed); // 输出: "!dlroW ,olleH" } } ``` 这种方法简单且高效[^1]。 #### 方法二:使用 `StringBuffer` 的 `reverse()` 方法 与 `StringBuilder` 类似,`StringBuffer` 也提供了一个 `reverse()` 方法,但它是线程安全的,因此在多线程环境下可能更适用。 ```java public class ReverseStringExample { public static void main(String[] args) { String string = "Hello, World!"; String reverse = new StringBuffer(string).reverse().toString(); System.out.println("字符串反转前:" + string); System.out.println("字符串反转后:" + reverse); } } ``` 虽然 `StringBuffer` 是线程安全的,但在单线程环境中,它的性能通常略低于 `StringBuilder`[^3]。 #### 方法三:使用字符数组 通过将字符串转换为字符数组并逐个交换字符位置,可以手动实现字符串反转。 ```java public class ReverseStringExample { public static void main(String[] args) { String original = "Hello, World!"; char[] charArray = original.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 reversed = new String(charArray); System.out.println(reversed); // 输出: "!dlroW ,olleH" } } ``` 这种方法不依赖于内置方法,适合需要自定义逻辑的场景[^2]。 #### 方法四:使用递归 递归是一种优雅但可能效率较低的方法,适用于学习和理解递归机制。 ```java public class ReverseStringExample { public static String reverse(String str) { if (str == null || str.length() <= 1) { return str; } return reverse(str.substring(1)) + str.charAt(0); } public static void main(String[] args) { String original = "Hello, World!"; String reversed = reverse(original); System.out.println(reversed); // 输出: "!dlroW ,olleH" } } ``` 递归方法的性能取决于字符串长度,过长可能导致栈溢出。 #### 方法五:使用 Apache Commons Lang 库 Apache Commons Lang 提供了 `StringUtils.reverse()` 方法,可以方便地实现字符串反转。 ```java import org.apache.commons.lang3.StringUtils; public class ReverseStringExample { public static void main(String[] args) { String original = "Hello, World!"; System.out.println(StringUtils.reverse(original)); // 输出: "!dlroW ,olleH" } } ``` 此方法需要引入外部库,但对于已有项目来说非常便捷。 #### 方法六:使用 Java 8 的 Stream API 尽管不是最优解,但可以通过 Stream API 实现字符串反转。 ```java public class ReverseStringExample { public static void main(String[] args) { String original = "Hello, World!"; String reversed = new StringBuilder( original.chars() .mapToObj(c -> (char) c) .collect(Collectors.toList()) .stream() .reduce("", (s, c) -> c + s, String::concat)) .toString(); System.out.println(reversed); // 输出: "!dlroW ,olleH" } } ``` 这种方法主要用于展示 Stream API 的灵活性,但在性能上不如其他方法[^1]。 --- ### 性能对比 - `StringBuilder` 和 `StringBuffer` 的 `reverse()` 方法性能相当,但 `StringBuilder` 更快,因为它不是线程安全的[^3]。 - 字符数组方法和递归方法的性能取决于实现细节,通常字符数组方法更快。 - 使用外部库如 Apache Commons Lang 可以简化代码,但会增加项目的依赖[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值