0

Australia@2@India@30@UK@4@USA@43 次のように逆にする必要がある文字列 がありますUSA@43@UK@4@India@30@Australia@2

これは単なるサンプル文字列です。実際には、文字列には少なくとも 20 個の @ 記号があります。

試してみnew StringBuilder(newString).reverse().toString();ましたが、得られる出力は非常に奇妙です。

4

4 に答える 4

3

わかりました、これはあなたが試すことができるものです: -

    String str = "Australia@2@India@30@UK@4@USA@43";

    String[] arr = str.split("(?<![a-zA-Z])@(?<!\\d)");

    StringBuilder builder = new StringBuilder();

    for(int i = arr.length - 1; i >= 0; i--) {
        builder.append(arr[i] + "@");
    }

    // Remove the last `@`
    builder = builder.replace(builder.lastIndexOf("@"), 
                              builder.lastIndexOf("@") + 1, "");

    System.out.println(builder.toString());

出力: -

USA@43@UK@4@India@30@Australia@2

正規表現の説明: -

(?<![a-zA-Z])@(?<!\\d)@-前に anyalphabetを付けずsucceeded、 any を付けない分割digit

于 2012-10-27T11:26:27.930 に答える
0

REverseは、ABCがCBAに反転することを意味します....得られる結果は奇妙ではなく、反対の順序の文字だけです。@に基づいて分割するかもしれません

于 2012-10-27T11:05:28.927 に答える
0

これが最善の解決策であるかどうかはわかりません。もっと良い解決策があると確信していますが、以下のコードで目的の出力が得られます。

String s="Australia@2@India@30@UK@4@USA@43";
        String[] sArr = s.split("@");
        String rev="";
        String temp="";
        for(int i= sArr.length-1;i>=0;i--){
            Scanner scan = new Scanner(sArr[i]);
            if(scan.hasNextInt()){
                temp='@'+scan.next();
            }
            else if(scan.hasNext()){
                rev+=scan.next()+temp;
            }
        }
        System.out.println(rev);



OUTPUT:USA@43UK@4India@30Australia@2
于 2012-10-27T11:17:00.113 に答える
0

これが私が思いつく簡単な解決策です。String.split および StringBuffer クラスを採用しています。

public class TestStrings {
    public static void main(String[] args) {        
            String sampleStr = "Australia@2@India@30@UK@4@USA@43";

        String [] strArr = sampleStr.split("@");

        StringBuffer strBuffer = new StringBuffer();
        for(int i=strArr.length-1;i>=0;i=i-2)
    strBuffer.append(strArr[i-1]+"@"+strArr[i]);


        String finalStr = strBuffer.toString().replaceFirst("[@]$", "");
        System.out.println(finalStr);
       }
}

// 出力 // USA@43UK@4India@30Australia@2

于 2012-10-27T11:24:40.910 に答える