我有一个 Australia@2@India@30@UK@4@USA@43
需要反转的字符串,例如USA@43@UK@4@India@30@Australia@2
这只是一个示例字符串,实际上该字符串至少有 20 个@ 符号。
我试过new StringBuilder(newString).reverse().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@UK@4@India@30@Australia@2
正则表达式的解释: -
(?<![a-zA-Z])@(?<!\\d)
- 拆分@
之前没有任何alphabet
,也没有succeeded
任何digit
REverse 意味着 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.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