2010-10-05 59 views
10

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

这是不行的,也没有加入逃逸反斜线。

+0

为什么这个标签的正则表达式?您没有使用任何正则表达式... – 2010-10-05 00:08:45

+1

'replaceAll'使用正则表达式,因此第一个参数是正则表达式'*'。 '*'是一个正则表达式*元字符*,具有特殊的含义。您应该阅读正则表达式教程,例如:http://www.regular-expressions.info/tutorial.html。 – 2010-10-05 00:10:08

+1

@Ed Swangren他是,_replaceAll_将正则表达式字符串作为第一个参数 – 2010-10-05 00:10:46

回答

13

我想通了

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

test = test.replaceAll(@“\ *”,@“\\ *”);我讨厌亲自使用字符串文字。 – WernerCD 2010-10-05 00:11:41

+0

@WernerCD:我从来没有见过。那是什么语法? – Thilo 2010-10-05 00:13:58

+0

@WernerCD:看起来像C#不是Java给我的。 – 2010-10-05 00:15:42

3

对于那些保持在家里的分数,由于理解的答案可能会有所帮助别人......

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

作品,因为你必须逃脱特殊字符*为了使正则表达式开心。但是,\是Java字符串中的特殊字符,因此在Java中构建此正则表达式时,还必须转义\,因此\\*

这经常会导致在将正则表达式组合在Java字符串中时相当于双重转义。

11

你不需要这方面的任何正则表达式的功能,所以你应该使用非正则表达式版本String.replace(CharSequence, CharSequence)

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