11

是否可以用“\?”替换所有问号(“?”)?

假设我有一个字符串,我想删除该字符串的某些部分,其中一部分包含一个 URL。像这样:

String longstring = "..."; //This is the long String
String replacestring = "http://test.com/awesomeness.asp?page=27";
longstring.replaceAll(replacestring, "");

但!据我了解,您不能将 replaceAll() 方法与包含一个问号的字符串一起使用,您必须使它们像这样“\?” 第一的。

所以问题是;有没有办法用“\”替换问号?在字符串中?不,我只能更改字符串。

在此先感谢,希望有人理解我!(抱歉英语不好……)

4

4 回答 4

25

不要用replaceAll(),用replace()

这是一种常见的误解,即replaceAll()替换所有出现的事件并replace()仅替换一个或某物。这是完全不正确的。

replaceAll()名字不好 - 它实际上替换了regex
replace()替换简单的字符串,这是您想要的。

这两种方法都会替换所有出现的目标。

只需这样做:

longstring = longstring.replace(replacestring, "");

这一切都会奏效。

于 2012-12-09T20:38:19.390 回答
4

也逃脱\,使用\\\\?.

String longstring = "..."; //This is the long String
String replacestring = "http://test.com/awesomeness.asp?page=27";
longstring=longstring.replaceAll(replacestring, "\\\\?");

但正如其他答案所提到的,replaceAll有点矫枉过正,只是replace应该工作。

于 2012-12-09T20:32:52.767 回答
2

使用String.replace()代替String.replaceAll()

longstring = longstring.replace("?", "\\?");

String.replaceAll()使用正则表达式,而String.replace()使用纯文本。

于 2012-12-09T20:32:46.503 回答
2

replaceAll采用正则表达式,?在正则表达式世界中具有特殊含义。

您应该replace在这种情况下使用,因为您不需要正则表达式。

String longstring = "..."; //This is the long String
String replacestring = "http://test.com/awesomeness.asp?page=27";
longstring = longstring.replace(replacestring, "");

哦,字符串是不可变的!!longstring = longstring.replace(..),注意分配。

于 2012-12-09T20:32:53.117 回答