2013-01-08 50 views
0

我遇到以下問題: 我的應用程序中有一些字符串需要檢查 - 檢查此字符串是否包含與" "不同的字符(空白空間),/n/r 例如:java性能問題 - 正則表達式VS內部字符串方法

  • " g" - 包含
  • " /n " - 不包含
  • " " - 不包含

我想要做一個reg表達式,但我不希望使用通用的模式.*[a-zA-Z0-9]+.* .相反,我想是這樣.*[!" ""/n"/r"]。 (與" ""/r""n"不同的每個字符)。

我的問題是,

  1. 我不知道這種模式是有效的(以上不工作)
  2. 我不知道這是否會更快然後使用是我 定期的字符串方法。
+1

在我看來,迭代字符將是最快的方法 - 你的「模式」非常簡單,編譯它是浪費時間。另外,你可能想看看Character.isWhiteSpace() – radai

+1

順便說一句,你可以使用'matches'和'\ S +'來檢查。效率明智,沒有評論。 – nhahtdh

回答

2

首先,你的意思是\n\r,而在Java中,這意味着逃避反斜槓以及與\\n\\r。其次,如果您只是想要捕獲任何非空白字符,只需使用\\S*[^\\s]這種模式即可。 \S是非空格,或者\s是空格,而[^<charset>]表示「匹配不屬於這些內容的任何東西」。

第三,如果這是一個重複的檢查,一定要編譯一次正則表達式,然後多次使用它。

第四,按照通常的分析策略。首先,這是在你的應用程序的關鍵地帶?如果是這樣,那麼以你爲基準。

+1

我嘗試過使用[^ \\ S],但它並不完全不起作用。其結果不正確 – Nativ

+0

@powerX固定。 。 。 。 – djechlin

1

這裏的東西,你想要做什麼,但(像我上面說的),它會更快的去在人物:

Pattern NOT_WHITESPACE_DETECTOR = Pattern.compile("[^ \\n\\r]"); 
Matcher m = NOT_WHITESPACE_DETECTOR.matcher(" \n  \r  bla  "); 
if (m.find()) { 
    //string contains a non-white-space 
} 

也注意到,在Java中空白的定義是多少寬度大於指定,即使再有以Unicode(但也有那些庫)是空格在那裏,java的犯規檢測

相關問題