0

我有一个字符串:

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接受两个参数regexreplacement. 在第一个参数中,我们要传递匹配的正则表达式

  • 一个或多个数字 -\\d代表一个数字,
    \\d+代表一个或多个数字
    我们也可以通过用括号括起来将其分组(\\d+)- 这将是第一组
  • 接下来应该是空格、等号和另一个空格
  • 接下来,一个或多个字符 -\\w表示范围内的任何字符a-z A-Z 0-9_
    \\w+将表示一个或多个\\w类字符
    我们也将它放在组中(\\w+)- 这将是第二组

现在replacement部分地我们可以使用带有组号$xx组。
因此,如果我们这样写,"$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 回答