我有以下字符串
String path = "(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)";
我使用了以下代码,
String delims = "\\.";
String[] tokens = path.split(delims);
int tokenCount = tokens.length;
for (int j = 0; j < tokenCount; j++) {
System.out.println("Split Output: "+ tokens[j]);
}
当前输出
Split Output: (tags:homepage)
Split Output: (tags:project mindshare)
Split Output: (tags:5
Split Output: 5
Split Output: x)
Split Output: (tags:project 5
Split Output: x)
最终目标是将此字符串转换为
String newpath = "(tags:homepage)(tags:project mindshare)(tags:5.5.x)(tags:project 5.x)";
答案 0 :(得分:3)
您可以使用积极的外观来实现这一目标:
String path = "(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)";
String newPath = path.replaceAll("(?<=\\))\\.", ""); // look for periods preceeded by `)`
System.out.println(newPath);
O / P:
(tags:homepage)(tags:project mindshare)(tags:5.5.x)(tags:project 5.x)
答案 1 :(得分:3)
您可以在不使用正则表达式的情况下以简洁的方式执行此操作,甚至支持嵌套括号(在您需要支持它们的那一天)。
这里你要做的是保留括号内的所有内容,这样我们就可以遍历字符并保持开括号的数量。如果此计数大于0,我们添加字符(这意味着我们在parens中);如果没有,我们会忽视这个角色。
String path = "(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)";
StringBuilder sb = new StringBuilder();
int openParens = 0;
for (char c : path.toCharArray()) {
if (c == '(') openParens++;
if (openParens > 0) sb.append(c);
if (c == ')') openParens--;
}
System.out.println(sb.toString());
这样做的好处是你不必依赖:在parens之间有一个点,没有嵌套的parens等。
答案 2 :(得分:0)
这是一个简单的方法。
System.out.println("(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)".replaceAll("\\)\\.\\(", ")("));
输出
(tags:homepage)(tags:project mindshare)(tags:5.5.x)(tags:project 5.x)