我有一个字符串:
String s = "1 = Nick , 2 = Jack , 3 = Sarah , 4 = Katherina";
我想改变这样的单词顺序:
String s = "Nick = 1 , Jack = 2 , Sarah = 3 , Katherina = 4";
我如何更改地点编号和名称?
答案 0 :(得分:13)
String s = "1 = Nick , 2 = Jack , 3 = Sarah , 4 = Katherina";
s = s.replaceAll("(\\d+) = (\\w+)", "$2 = $1");
System.out.println(s);
replaceAll
有两个参数regex
和replacement
。在第一个参数中,我们希望传递匹配
\\d
代表一位数字,\\d+
代表一个或多个数字(\\d+)
包围它来将它放在一个组中 - 这将是第一组 \\w
表示范围a-z
A-Z
0-9
或_
范围内的任何字符。
\\w+
代表\\w
类的一个或多个字符
我们还会将其放入群组(\\w+)
- 这将是第二群组 现在在replacement
部分中,我们可以使用$x
组,其中x
是组号。
因此,如果我们将其写为"$2 = $1"
,则意味着我们要使用存储在组2(名称)中的匹配部分,然后追加" = "
,然后追加存储在组1(ID)中的匹配部分。
答案 1 :(得分: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);