Java拆分和替换

时间:2016-08-08 09:16:52

标签: java

我有以下字符串

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)";

3 个答案:

答案 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)