簡體   English   中英

如何在逗號后反轉字符串,然后打印字符串Java的第一部分

[英]How to reverse a String after a comma and then print the 1st half of the String Java

例如String grdwe,erwd變成dwregrdwe

我有大部分代碼,在我的方法中執行for循環后,我在訪問代碼中的所有ch1和ch2時遇到了麻煩,我想我必須將ch1和ch2的所有元素添加到兩個單獨的字符數組中,但是我不會知道最初如何初始化數組的內容僅讀取1個元素,我想訪問所有元素,然后連接它們。 我很沮喪

而且我更願意避免Stringbuilder

public class reverseStringAfterAComma{
    public void reverseMethod(String word){   

        char ch1 = ' ';
        char ch2 = ' ';
        for(int a=0; a<word.length(); a++)
        {
            if(word.charAt(a)==',')
            {
                for(int i=word.length()-1; i>a; i--)
                {
                    ch1 = word.charAt(i);
                    System.out.print(ch1);
                }
                for (int j=0; j<a; j++)
                {
                    ch2 = word.charAt(j);
                    System.out.print(ch2);
                }
            }
        }

        //System.out.print("\n"+ch1);
        //System.out.print("\n"+ch2);
    } 
    public static void main(String []args){
        reverseStringAfterAComma rsac = new reverseStringAfterAComma();
        String str="grdwe,erwd";
        rsac.reverseMethod(str);
     }
}

您可以使用字符串生成器所描述的在這里

首先使用以下方法分割字符串:

String[] splitString = yourString.split(",");

然后使用以下方法反轉字符串的第二部分:

splitString[1] = new StringBuilder(splitString[1]).reverse().toString();

然后像這樣附加兩個部分:

String final = splitString[1] + splitString[0];

如果要打印,請執行以下操作:

System.out.print(final);

最終代碼為:

String[] splitString = yourString.split(",");
splitString[1] = new StringBuilder(splitString[1]).reverse().toString();
String final = splitString[1] + splitString[0];
System.out.print(final);

然后,由於您正在使用stringbuilder,因此需要做的所有事情就是將其放在代碼的頂部,以導入它:

import java.lang.StringBuilder;

看來您當前有正常工作的代碼,但是希望在for循環之外打印/保存該值。 只需在進入循環之前設置一個變量,然后在每個循環中將char連接起來:

String result = "";
for (int a = 0; a < word.length(); a++) {
    if (word.charAt(a) == ',') {
        for (int i = word.length() - 1; i > a; i--) {
            ch1 = word.charAt(i);
            result += ch1;
        }
        for (int j = 0; j < a; j++) {
            ch2 = word.charAt(j);
            result += ch2;
        }
    }
}
System.out.println(result);

演示

讓我們提出一個不使用StringBuilder的解決方案

您應該知道沒有正確的理由不使用該類,因為已經過充分測試

第一步是在找到的第一個逗號處拆分String (我假設,如果有多個逗號,則其余部分為要反轉的文本的一部分)。 為此,我們可以String.split(String regex, int limit)

極限是這樣定義的

  • 如果限制n大於零,則將最多應用n-1次該模式, 該數組的長度將不大於n,並且該數組的最后一個條目將包含除最后一個匹配的定界符之外的所有輸入。
  • 如果n為非正數,則該模式將被盡可能多地應用,並且數組可以具有任何長度。
  • 如果n為零,則該模式將被盡可能多地應用,該數組可以具有任何長度,並且尾隨的空字符串將被丟棄。

范例:

"foobar".split(",", 2) //      {"foobar"}
"foo,bar".split(",", 2) //     {"foo", "bar"}
"foo,bar,far".split(",", 2) // {"foo", "bar,far"}

因此可以在這里利用我們的優勢:

String text = "Jake, ma I ,dlrow olleh";
String[] splittedText = text.split( ",", 2 ); //will give a maximum of a 2 length array

知道,我們只需要使用最簡單的算法來反轉第二個數組(如果存在)。

String result;
if ( splittedText.length == 2 ) { //A comma was found
    char[] toReverse = splittedText[1].toCharArray(); //get the char array to revese
    int start = 0;
    int end = toReverse.length - 1;
    while ( start < end ) { //iterate until needed
        char tmp = toReverse[start];
        toReverse[start] = toReverse[end];
        toReverse[end] = tmp;

        start++; //step forward
        end--; //step back
    }
    result = new String( toReverse ) + splittedText[0];
} 

這是應該使用StringBuilder完成的部分

if ( splittedText.length == 2 ){ 
    result = new StringBuilder(splittedText[1]).reverse().toString() + splittedText[0];
}

如果只有一個單元格,則結果與原始文本相同

else { //No comma found, just take the original text
    result = text;
}

然后我們只需要打印結果

System.out.println( result );

你好,世界,我是傑克

暫無
暫無

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

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