我有一个字符串Australia@2@India@30@UK@4@USA@43
我需要反转USA@43@UK@4@India@30@Australia@2
这只是一个示例字符串,实际上String至少有20个@符号。
我已经尝试new StringBuilder(newString).reverse().toString();
,但我得到的输出非常奇怪。
答案 0 :(得分: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
答案 1 :(得分:0)
反向意味着ABC与CBA相反.... 你得到的结果并不奇怪,只是相反顺序中的字符。 您可以根据@
进行拆分答案 2 :(得分: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
答案 3 :(得分: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);
}
}
// OUTPUT // USA @ 43UK @ 4India @ 30Australia @ 2