私は1つの文字列を持っています:
String s = "1 = Nick , 2 = Jack , 3 = Sarah , 4 = Katherina";
そのような単語の順序を変更したい:
String s = "Nick = 1 , Jack = 2 , Sarah = 3 , Katherina = 4";
場所番号と名前を変更するにはどうすればよいですか?
私は1つの文字列を持っています:
String s = "1 = Nick , 2 = Jack , 3 = Sarah , 4 = Katherina";
そのような単語の順序を変更したい:
String s = "Nick = 1 , Jack = 2 , Sarah = 3 , Katherina = 4";
場所番号と名前を変更するにはどうすればよいですか?
String s = "1 = Nick , 2 = Jack , 3 = Sarah , 4 = Katherina";
s = s.replaceAll("(\\d+) = (\\w+)", "$2 = $1");
System.out.println(s);
replaceAll
は との 2 つの引数regex
を取りますreplacement
。最初の引数では、一致する正規表現を渡したい
\\d
1 つの数字を\\d+
表し、1 つ以上の数字(\\d+)
- これが最初のグループになります\\w
内の任意の文字を表すか、クラスの 1 つまたは複数の文字を表し
、グループにも配置します - これは2 番目のグループになりますa-z
A-Z
0-9
_
\\w+
\\w
(\\w+)
これで、replacement
部分的にグループを使用できるようになりました。 $x
wherex
はグループ番号です。
したがって"$2 = $1"
、グループ 2 (名前) に格納された一致部分を使用してから" = "
グループ 1 (ID) に格納された一致部分を追加することを意味するように記述します。
正規表現には良い答えがあることを知っています。私は、この答えに対して正規表現がより優れた/より単純なソリューションである理由を示すために、(複雑な) 正規表現を使用しない代替案を比較のために提供しているだけです。
String s = "1 = Nick , 2 = Jack , 3 = Sarah , 4 = Katherina";
s = s.replace(" ", "");
StringBuilder out = new StringBuilder();
String[] s2 = s.split(",");
for (int i = 0; i < s2.length; i++) {
String[] s3 = s2[i].split("=");
if (i == s2.length - 1) {
out.append(s3[1]).append(" = ").append(s3[0]);
} else {
out.append(s3[1]).append(" = ").append(s3[0]).append(" , ");
}
}
System.out.print(out);