Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java拆分和替换_Java - Fatal编程技术网

Java拆分和替换

Java拆分和替换,java,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++) { Sy

我有以下字符串

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]);
}
最终目标是将此字符串转换为

String newpath = "(tags:homepage)(tags:project mindshare)(tags:5.5.x)(tags:project 5.x)";
您可以使用正向回溯来实现这一点:

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);
您可以使用正向回溯来实现这一点:

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

这里有一个简单的方法

System.out.println("(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)".replaceAll("\\)\\.\\(", ")("));
输出为


(tags:homepage)(tags:projectmindshare)(tags:5.5.x)(tags:project5.x)

以下是一个简单的方法

System.out.println("(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)".replaceAll("\\)\\.\\(", ")("));
输出为


(tags:homepage)(tags:projectmindshare)(tags:5.5.x)(tags:project5.x)

您可以不使用正则表达式,以一种简洁、简单的方式来实现这一点,该正则表达式甚至支持嵌套括号(在您需要支持括号的时候)

这里要做的是保留括号内的所有内容,这样我们就可以在字符上循环并保留开括号的计数。如果此计数大于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());

这有一个优点,您不必依赖它:在参数之间有一个单点,没有嵌套的参数等等。

您可以不使用正则表达式,以一种简洁的方式来实现这一点,该正则表达式甚至支持嵌套的圆括号(在您需要支持它们的那一天)

这里要做的是保留括号内的所有内容,这样我们就可以在字符上循环并保留开括号的计数。如果此计数大于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());

这有一个优点,您不必依赖它:在参数之间有一个单点,没有嵌套的参数等等。

为什么不使用
replaceAll(“)。(“,”)(“)
?如果你不想换行,就用“System.out.print”而不是“println”。@MuratK.-没那么简单。他只需要替换前面有一个
可能重复的@TheLostMind是的,我编辑了它并提供了一个replaceAll答案。为什么不使用
replaceAll(“)(“,”)()
?如果您不想换行,请使用“System.out.print”而不是“println”。@MuratK.-没那么简单。他只需要替换前面有
可能与@TheLostMind重复是的,我编辑了它并提供了一个replaceAll答案。还有其他更好的方法吗,除了replaceAll?@srinisunka-是的,有,比如拆分和附加..甚至在循环中有indexOf+subString等。但是没有比
replaceAll
更优雅的方法,然后使用
split()
使用相同的正则表达式。然后您将获得可以更改的单个令牌@srinisunka@srinisunka-如果您想要一个不使用正则表达式的解决方案,请检查Tunaki的答案。还有其他更好的方法吗,除了replaceAll?@srinisunka-是的,有,例如拆分和附加..甚至循环中的indexOf+子字符串等。但是没有比使用相同的正则表达式使用
replaceAll
更优雅的了。然后,您将获得可以更改的单个令牌@srinisunka@srinisunka-如果您想要不使用正则表达式的解决方案,请检查Tunaki的答案。