2010-11-05 181 views
2

我以前在Java中使用過string.replaceAll(),但沒有遇到任何麻煩,但是我很困惑這一點。我認爲這只是工作,因爲沒有「/」或「$」字符。這是我想要做的:這個Java String.replaceAll()代碼爲什麼不起作用?

String testString = "__constant float* windowArray"; 
String result = testString.replaceAll("__constant float* windowArray", "__global float* windowArray"); 

變量結果看起來和testString一樣。我不明白爲什麼沒有改變,請幫助。

+0

哇。我越學習Java,就越喜歡C#。 – Crispy 2010-11-05 21:07:26

+0

可能的[String.replaceAll反斜槓問題]的副本(http://stackoverflow.com/questions/1701839/backslash-problem-with-string-replaceall) – McDowell 2011-05-26 08:32:57

回答

7

傳遞的replaceAll的第一個參數仍被視爲正則表達式。 *字符是一個特殊字符,意思是粗略地說,字符串中的前一個字符(這裏是:t)可以存在0次或更多次。你想要做的是逃避*的正則表達式。你的第一個參數應該更像:

"__constant float\\* windowArray" 

第二個參數是,你的目的,至少,還只是一個普通的字符串,所以你不需要逃避*那裏。

String result = testString.replaceAll("__constant float\\* windowArray", "__global float* windowArray"); 
2

您需要轉義*,因爲它是正則表達式中的特殊字符。

所以testString.replaceAll("__constant float\\* windowArray", "__global float\\* windowArray");

+0

或者,如果手動轉義不可行(例如,在構建模式時在運行時),使用'Pattern.quote(String)'和'Matcher.quoteReplacement(String)'。 – Barend 2010-11-05 20:54:49

0
String result = testString.replaceAll("__constant float windowArray\\\\*", "__global float\\* windowArray"); 
2

*是一個正則表達式量詞。 replaceAll方法使用正則表達式。爲避免使用正則表達式,請嘗試使用替代方法。

實施例:

String testString = "__constant float* windowArray"; 
String replaceString = "__global float* windowArray"; 
String result = testString.replace(testString.subSequence(0, testString.length()-1), 
      replaceString.subSequence(0, replaceString.length()-1)); 
相關問題