java筆試中字符串翻轉的幾種方法(java---華爲----字符逆序)

1.調用reverse() 方法實現翻轉

public static String reversel1(String str){
    return new StringBuffer(str).reverse().toString();
}

通過new一個新的 StringBuffer 調用自帶方法

2.通過字符串數組實現從尾部開始逐個逆序放入字符串中

public static String reverse2(String s)
{
    char[] array = s.toCharArray();    //String轉字符數組
    StringBuilder reverse = new StringBuilder();  // 使用StringBuilder,更快。
    for (int i = array.length - 1; i >= 0; i--){
        reverse.append(array[i]);
    }
    return reverse.toString();
}

3.通過字符串數組實現從頭部開始逐個正序放入字符串中

public static String reverse3(String s)
{
    int length = s.length();
    String reverse = "";  //注意這是空串,不是null

    for (int i = 0; i < length; i++){
        reverse = s.charAt(i) + reverse;//在字符串前面連接,  而非常見的後面
        //即String="reverse",
        // 放入時會"e";"s";"r";"e";"v";"e";"r";的放入String。charAt(i++)
        //從尾到頭正序放入
    }
    return reverse;
}

4.C語言中常用的方法:

public static String reverse5(String orig)
{
    char[] s = orig.toCharArray();
    int n = s.length - 1;
    int halfLength = n / 2;
    for (int i = 0; i <= halfLength; i++) {
        char temp = s[i];
        s[i] = s[n - i];
        s[n - i] = temp;
    }
    return new String(s);  //知道  char數組和String相互轉化
}

5.利用棧的先入後出的特性實現字符串的逆轉

public static String reverse5(String string) {
    StringBuilder sb = new StringBuilder();
    Stack<Character> s = new Stack<Character>();
    for (int i = 0; i < string.length(); i++) {
        s.add(string.charAt(i));
    }
    for (int i = 0; i < string.length(); i++) {
        sb.append(s.pop());
    }
    return sb.toString();
}

6.通過二位進制的右移,也就是/2,實現。與方法4異曲同工

public static String reverse6(String string) {
    StringBuffer sb = new StringBuffer(string);
    for (int i = 0, j = sb.length() - 1; i < sb.length() >>> 1; i++, j--) {
        char temp = sb.charAt(i);
        sb.setCharAt(i, sb.charAt(j));
        sb.setCharAt(j, temp);
    }
    return sb.toString();
}

 

所有翻轉的源碼

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.nextLine();

            // 逆序翻轉
            System.out.println(reverse1(str));

        }
    }

    public static String reverse1(String str) {
        return new StringBuffer(str).reverse().toString();
    }

    public static String reverse2(String s) {
        char[] array = s.toCharArray(); // String轉字符數組
        String reverse = ""; // 注意這是空串,不是null
        for (int i = array.length - 1; i >= 0; i--) {
            reverse += array[i];
            // 即String="reverse",
            // 放入時會"r";"e";"v";"e";"r";"s";"e";的放入String.charAt(String.charAt(length--))
        }
        return reverse;
    }

    public static String reverse3(String s) {
        int length = s.length();
        String reverse = ""; // 注意這是空串,不是null

        for (int i = 0; i < length; i++) {
            reverse = s.charAt(i) + reverse;// 在字符串前面連接, 而非常見的後面
            // 即String="reverse",
            // 放入時會"e";"s";"r";"e";"v";"e";"r";的放入String。charAt(i++)
            // 從尾到頭正序放入
        }
        return reverse;
    }

    public static String reverse4(String orig) {
        char[] s = orig.toCharArray();
        int n = s.length - 1;
        int halfLength = n / 2;
        for (int i = 0; i <= halfLength; i++) {
            char temp = s[i];
            s[i] = s[n - i];
            s[n - i] = temp;
        }
        return new String(s); // 知道 char數組和String相互轉化
    }

    public static String reverse5(String string) {
        StringBuffer sb = new StringBuffer();
        Stack<Character> s = new Stack<Character>(); // new一個棧
        for (int i = 0; i < string.length(); i++) {
            s.add(string.charAt(i));
            // 往棧中逐個正序放入字符型string.charAt(i++);
        }
        for (int i = 0; i < string.length(); i++) {
            sb.append(s.pop());
            // 棧取出的順序與放入的順序相反,所以實現逆序

            // length=string.length();
            // 逐個增加string.charAt(length--);
        }
        return sb.toString();
    }

    public static String reverse6(String string) {
        StringBuffer sb = new StringBuffer(string);
        for (int i = 0, j = sb.length() - 1; i < sb.length() >>> 1; i++, j--) {
            char temp = sb.charAt(i);
            sb.setCharAt(i, sb.charAt(j));
            sb.setCharAt(j, temp);
        }
        return sb.toString();
    }

    public static String reverse7(String string) {
        StringBuffer sb = new StringBuffer();
        for (int i = string.length() - 1; i >= 0; i--) {
            sb.append(string.charAt(i));
        }
        return sb.toString();
    }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章