簡體   English   中英

如何使用 Stringbuilder 和 for 循環反轉字符串

[英]How to reverse a String with Stringbuilder and for loop

我設法反轉一個 String 使其成為一個字符數組,也在 Stringbuilder 上使用 .reverse 方法,設法用另一個 String 和一個 for 循環來做到這一點(我讀到這不是一個好主意,因為它會損害性能),但我不知道如何使用 Stringbuilder 和 for 循環反轉字符串。 它給了我錯誤 - “左側必須是一個變量”。 還嘗試為 Stringbuilder 設置長度,但看起來我遺漏了一些東西。 我試圖在 Stringbuilder 的括號外設置索引,因為它們用於參數,但我只是在猜測如何做,也嘗試了 .append 。

public class Task1 {

    public static void main(String[] args) {

        String str = "Reverse me";
        StringBuilder printStr = new StringBuilder();
        int j = 0;

        for (int i = str.length()-1; i > 0; i--) {
            printstr(j) = str[i];

        }
    }

}

我認為您在正確的路線上,只是我要更改的幾件事:首先,我們能夠指定StringBuilder的長度,因為我們知道它與我們正在反轉的String長度相同。

沒有必要遍歷整個數組,只需一半的數組就足以執行本質上只是切換字符的操作。 所以最右邊的字符現在是最左邊的字符,這節省了一點計算。

public static void main(String[] args) throws IOException {
    String str = "Reverse me";
    StringBuilder printStr = new StringBuilder();
    printStr.setLength(str.length());

    for(int i =0; i<str.length()/2;i++){
        char left = str.charAt(i);
        final int fromRight = str.length() - i - 1;
        printStr.insert(i, str.charAt(fromRight));
        printStr.insert(fromRight, left);
    }
}

以下是角色切換本質上如何工作的直觀表示:可以在此處找到更多信息

在此處輸入圖片說明

好的,所以你犯了多個錯誤,你試圖通過使用括號訪問索引,你沒有迭代整個字符串,因為你的循環條件是 i > 0,它應該是 i >= 0,你的循環是錯誤的(忽略括號),你可以結合 append() 和 charAt() 方法來做你需要的:

    for (int i = str.length()-1; i >= 0; i--) {
        printStr.append(str.charAt(i));
    }

我們從字符串的最后一個索引到索引 0,所以我們從字符串的末尾開始,並將每個字符附加到我們的 StringBuilder。 最后你有你的反向字符串。

    public class HelloWorld {
    public static void main(String[] args) {

        System.out.println(reverseString("Example"));
    }

    public static String reverseString(String str) {
        StringBuilder builder = new StringBuilder();

        for (int i = str.length() - 1; i >= 0; i--) {
            builder.append(str.charAt(i));
        }
        return builder.toString();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM