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)- 拆分@之前没有任何alphabet,也没有succeeded任何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 回答