Java反转字符串

       前几天看见一篇文章,说使用Java能用几种方式反转一个字符串。首先要明白什么叫反转字符串,就是将一个字符串到过来啦,比如"倒过来念的是小狗"反转过来就是”狗小是的念来过倒“。接下来就把自己能想到的所有方式记录下来了。

1、第一个念头就是直接使用String类的反转方法,对不起,这样是不行的,因为String类没有这个方法。那么好吧,搞个数组,然后遍历数组,依次调换数组中对应的各个字符。

// 直接使用数组首位调换
public String reverse1(String str) {
    if (str == null || str.length() <= 1) {
        return str;
    }
    char[] array = str.toCharArray();
    char[] reverseArray = new char[array.length];
    for (int i = 0; i < array.length; i++) {
        reverseArray[array.length - 1 - i] = array[i];
    }
    return new String(reverseArray);
}

 

2、除了上面使用的方法,其实我们还可以使用递归迭代的方法,因为如果只有一个字符的时候,反转一个字符就是它本身。

// 巧妙使用递归的方式
public String reverse2(String str) {
    if (str == null || str.length() <= 1) {
        return str;
    }
    return reverse2(str.substring(1)) + str.charAt(0);
}

 

3、String类没有反转字符串这个方法,但是StringBuffer有这个方法,所以可以先将String转换成StringBuffer,然后利用StringBuffer反转,然后再将反转以后StringBuffer转换成String。这一招可能是最方便的。

// 借助其他包含反转方法的类
public String reverse3(String str) {
    if (str == null || str.length() <= 1) {
        return str;
    }
    StringBuffer sb = new StringBuffer(str);
    sb = sb.reverse();
    return sb.toString();
}

 

4、除了使用StringBuffer直接的反转方法,我们还可以借助StringBuffer的其他方法完成

 

//使用StringBuffer的setCharAt方法
public String reverse4(String str) {
    if (str == null || str.length() <= 1) {
        return str;
    }
    StringBuffer sb = new StringBuffer(str);
    for (int i = 0; i < (str.length() / 2); i++) {
        int swapIndex = str.length() - 1 - i;
        char swap = sb.charAt(swapIndex);
        sb.setCharAt(swapIndex, sb.charAt(i));
        sb.setCharAt(i, swap);
    }
    return sb.toString();
}

//使用StringBuffer的append方法
public String reverse4(String str) {
    if (str == null || str.length() <= 1) {
        return str;
    }
    StringBuffer sb = new StringBuffer(str.length());
    for (int i = str.length() - 1; i >= 0; i--) {
        sb.append(str.charAt(i));
    }
    return sb.toString();
}

 

5、再仔细想想,反转字符串的过程,就是一次将字符放入一个队列,然后再倒序的依次拿出来,这个恰好和Java的堆栈Stack很像,先进后出。

public String reverse5(String str) {
    if (str == null || str.length() <= 1) {
        return str;
    }
    String result = "";
    char[] arr = str.toCharArray();
    Stack<Character> stack = new Stack<Character>();
    for (char a : arr) {
        stack.push(a);
    }
    int length = stack.size();
    //注意这个地方必须要先把length暂存起来,因为在遍历的过程中,pop()堆的时候,会改变堆的大小。
    for (int i = 0; i < length; i++) {
        result += stack.pop();
    }
    return result;
}

 

       条条大路通罗马,只要肯思考,肯尝试,我们最终总能找到一中或者多种方式达到我们的目的。希望以后自己在编程的道路上,能够发散思维,寻找到解决各种问题的方法。

你可能感兴趣的:(java,反转字符串)