2012-02-07 55 views
0

^角色,我想檢查一個字符串,看它是否包含^符號,如果它確實顯示一條消息給用戶。檢查在java字符串處理

感謝

Pattern p = Pattern.compile("[a-z0-9 ]", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher("StringGoesHere"); 
boolean b = m.find(); 

if (b){ 
    System.out.println("bad"); 
} else { 
    System.out.println("fine"); 
} 
+0

那麼,什麼是你的問題? – simchona 2012-02-07 19:43:08

+0

...將其添加到模式中,並用'\'將其轉義。 – 2012-02-07 19:43:32

回答

15

一個正則表達式可能是矯枉過正,只使用String.contains()

如果你是熱衷於使用正則表達式,使用"\\^"\\將提供一個單一的\,這是打破了char。的特殊含義。

+2

我想你會發現,String.indexOf(焦炭)比String.contains(CharSequence的)相當快一點的時候搜索單個字符。 – 2012-02-07 19:58:50

+1

@TheRealBaumann:微優化。我相信大多數編譯器會將這兩個語句視爲相同[假設字符串是一個具有常量字符的文字]。 'contains()'更具可讀性。請記住:優化適用於編譯器,可讀性適用於程序員。 – amit 2012-02-07 20:02:55

+1

Java的實現實際上包含的正義呼聲String.indexOf(CharSequence.toString()),所以你在處理從字符串強制轉換爲CharSequence的回字符串最常見的用途。 – 2012-02-07 20:07:25

1
Pattern p = Pattern.compile("\\^"); 
+0

這實際上將匹配字符串*的開頭。 – 2012-02-07 19:45:37

+0

如果不逃脫,那不就是「開始行」嗎? – 2012-02-07 19:45:47

+0

(因爲編輯的,所以這些評論已經不再適用。表達式是'「^」'然後) – 2012-02-07 19:49:14

10

爲什麼不

String str = "StringGoesHere"; 
if(str.indexOf('^') != -1) 
{ 
    System.out.println("bad"); 
} 
else 
{ 
    System.out.println("fine"); 
} 
1

其實,最簡單的答案是:不使用正則表達式,只是搜索字符本身。

較長的答案是:查看轉義的正則表達式語法的詳細信息

在字符類中,^只有在第一個符號時纔是特殊的。所以[a-z^]將匹配任何a-z^,而[^a-z]匹配除a-z一切(因爲^作爲第一個字符是否定)。

在字符類外,^與該行的開頭匹配,除非您使用\將其轉義。對於Java內聯字符串,您需要將其編寫爲"\\^"