0

私は1つの文字列を持っています:

String s = "1 = Nick , 2 = Jack , 3 = Sarah , 4 = Katherina";

そのような単語の順序を変更したい:

String s = "Nick = 1 , Jack = 2 , Sarah = 3 , Katherina = 4";

場所番号と名前を変更するにはどうすればよいですか?

4

2 に答える 2

13
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。最初の引数では、一致する正規表現を渡したい

  • 1 つ以上の数字 - \\d1 つの数字を
    \\d+表し、1 つ以上の数字
    を表し、括弧で囲むことでグループに配置することもできます(\\d+)- これが最初のグループになります
  • 次はスペース、等号、別のスペース
  • 次に、1 つまたは複数の文字 -範囲\\w内の任意の文字を表すか、クラスの 1 つまたは複数の文字を表し 、グループにも配置します - これは2 番目のグループになりますa-z A-Z 0-9_
    \\w+\\w
    (\\w+)

これで、replacement部分的にグループを使用できるようになりました。 $xwherexはグループ番号です。
したがって"$2 = $1"、グループ 2 (名前) に格納された一致部分を使用してから" = "グループ 1 (ID) に格納された一致部分を追加することを意味するように記述します。

于 2013-09-18T00:01:07.853 に答える
1

正規表現には良い答えがあることを知っています。私は、この答えに対して正規表現がより優れた/より単純なソリューションである理由を示すために、(複雑な) 正規表現を使用しない代替案を比較のために提供しているだけです。

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);
于 2013-09-18T00:20:27.837 に答える