如何替换所有星号?

14
在Java中,我想要将所有*字符替换为\*
例如: 文本:select * from blah 结果:select \\* from blah
public static void main(String[] args) {
    String test = "select * from blah";
    test = test.replaceAll("*", "\\*");
    System.out.println(test);
}

这种方法不起作用,添加转义反斜杠也无效。


为什么打了正则表达式的标签?你并没有使用任何正则表达式... - Ed S.
2
replaceAll 使用正则表达式,因此第一个参数是正则表达式 ** 是正则表达式的 元字符,具有特殊含义。 你应该阅读正则表达式教程,例如:http://www.regular-expressions.info/tutorial.html。 - Richard Cook
2
@Ed Swangren,replaceAll 函数的第一个参数是正则表达式字符串。 - Nikita Rybak
@Richard:那就是线索... - Michael Petrotta
可能是Backslash problem with String.replaceAll的重复问题。 - McDowell
3个回答

24

我搞定了

    String test = "select * from blah *asdf";
    test = test.replaceAll("\\*", "\\\\*");
    System.out.println(test);

test = test.replaceAll(@"*", @"\*"); 我个人不喜欢使用 \,更倾向于使用字符串字面值。 - WernerCD
@WernerCD:在我看来,这似乎是C#而不是Java。 - Richard Cook
如果您已经找到了自己的解决方案,应将其接受为您问题的答案。 - JoshD
2
@WernerCD: replaceAll() 是 Java 中的方法,但是 @"" 则是 C# 中的逐字字符串字面量,Java 并不具备这样的功能。 - Alan Moore
1
这个可以用,但是有点过头了。对于简单的字符串替换,没有必要使用正则表达式。 - Sean Patrick Floyd
显示剩余3条评论

12

您不需要使用任何正则表达式功能,因此应使用非正则表达式版本 String.replace(CharSequence, CharSequence):

String test = "select * from blah *asdf";
test = test.replace("*", "\\*");
System.out.println(test);

7

如果你在家自学编程,那么理解这个问题的答案可能会对其他人有所帮助。以下是答案:

String test = "select * from blah *asdf";
test = test.replaceAll("\\*", "\\\\*");
System.out.println(test);

这段代码之所以能够正常工作,是因为你必须转义特殊字符*,才能让正则表达式起作用。然而,在Java字符串中,\也是一个特殊字符,因此在构建这个正则表达式时,你还必须转义\,因此变成了\\*

在Java字符串中拼接正则表达式时,这经常导致需要进行双重转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接