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)
@
-前に anyalphabet
を付けずsucceeded
、 any を付けない分割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