Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 如何使用string.replaceAll在某个单词后更改所有内容_Java_Regex - Fatal编程技术网

Java 如何使用string.replaceAll在某个单词后更改所有内容

Java 如何使用string.replaceAll在某个单词后更改所有内容,java,regex,Java,Regex,我有以下字符串:http://localhost:somePort/abc/soap/1.0 我希望字符串如下所示:http://localhost:somePort/abc string = string.replaceAll("/abc.*", "/abc") 我想使用string.replaceAll,但似乎无法正确使用正则表达式。我的代码如下所示:someString.replaceAll(“.*\\babc\\b.*”,“abc”) 我想知道我

我有以下字符串:
http://localhost:somePort/abc/soap/1.0

我希望字符串如下所示:
http://localhost:somePort/abc

string = string.replaceAll("/abc.*", "/abc")
我想使用string.replaceAll,但似乎无法正确使用正则表达式。我的代码如下所示:
someString.replaceAll(“.*\\babc\\b.*”,“abc”)

我想知道我错过了什么?我不想拆分字符串或使用.replaceFirst,正如许多解决方案所建议的那样。

您应该使用
replaceFirst
,因为在第一次匹配之后,您将删除所有后面的内容

text=  text.replaceFirst("/abc.*", "/abc");

您可以使用
indexOf
获取特定单词的索引,然后获取子字符串

String findWord = "abc";
text = text.substring(0, text.indexOf(findWord) + findWord.length());

使用
子字符串似乎更有意义,但如果必须使用
replaceAll
,下面是一种方法

您想用
/abc
替换
/abc
及其后的所有内容

string = string.replaceAll("/abc.*", "/abc")
如果您想更具辨别力,可以在
abc
之后添加一个单词边界,让您

string = string.replaceAll("/abc\\b.*", "/abc")

对于给定正则表达式的解释,它为什么不起作用:

\b
\b
-此处不需要单词边界,而且由于在开头添加了
*
,因此它匹配整个字符串,当您尝试将其替换为“abc”时,它将用“abc”替换整个匹配。因此你得到了错误的答案。相反,只尝试匹配所需的内容,然后匹配的内容将替换为“abc”字符串


如果不使用正则表达式,只使用
.substring
,您可能会发现这样做更容易。在这种情况下,我只想使用replaceAll和regex模式。我试图与类中的其他代码保持一致,即使它有缺陷。首先,\\b是一个空格字符:我建议使用来测试您的表达式,您可以测试replace all。第二,在删除第一部分时,应该在开始时使用组来捕获所有内容:someString.replaceAll((.*)\\/abc\\/.*,“$1/abc”);应该这样做