Java 将由指定字符分隔的字符串部分按相反顺序重新排序

Java 将由指定字符分隔的字符串部分按相反顺序重新排序,java,android,Java,Android,我有一个字符串Australia@2@India@30@UK@4@USA@43 我需要反转,例如USA@43@UK@4@India@30@Australia@2 这只是一个示例字符串,实际上该字符串至少有20个@符号 我尝试了newstringbuilder(newString.reverse().toString()但是我得到的输出非常奇怪。反向意味着ABC被反向为CBA。。。。 你得到的结果并不奇怪,只不过是按字母顺序排列的角色。 您可能会根据@进行拆分反向意味着ABC反向为CBA。。。。

我有一个字符串
Australia@2@India@30@UK@4@USA@43
我需要反转,例如
USA@43@UK@4@India@30@Australia@2

这只是一个示例字符串,实际上该字符串至少有20个@符号


我尝试了
newstringbuilder(newString.reverse().toString()但是我得到的输出非常奇怪。

反向意味着ABC被反向为CBA。。。。 你得到的结果并不奇怪,只不过是按字母顺序排列的角色。
您可能会根据@

进行拆分反向意味着ABC反向为CBA。。。。 你得到的结果并不奇怪,只不过是按字母顺序排列的角色。
您可能会基于@

进行拆分。我不确定这是否是最佳解决方案。我确定可能有很多更好的解决方案,但下面的代码给出了所需的输出:

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

我不确定这是否是最好的解决方案。我肯定会有很多更好的解决方案,但下面的代码给出了所需的输出:

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

我可以想出一个简单的解决办法。它使用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

我可以想出一个简单的解决办法。它使用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

好的,这是您可以尝试的:-

    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());

正则表达式的解释:-


(?-在
@
上拆分,前面不带任何
字母,也不带任何
数字
成功
,好的,这是您可以尝试的:-

    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
反向为
34@ASU@
是的,但我需要输出的方式是指定的……它不是反向的。
@USA@43
反向为
34@ASU@
是的,但是我需要输出的方式已指定。。。