2010-10-05 63 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);