2013-08-30 231 views
1

我想通過字符數組來分割字符串, 所以我有這樣的代碼:分割字符串

String target = "hello,any|body here?"; 
char[] delim = {'|',',',' '}; 
String regex = "(" + new String(delim).replaceAll("(.)", "\\\\$1|").replaceAll("\\|$", ")"); 
String[] result = target.split(regex); 

一切正常除非我想添加一個字符,如「Q」以DELIM []數組, 它拋出異常:

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 11 
(\ |\,|\||\Q) 

那麼,如何解決這個問題與非特殊字符的工作呢?

在此先感謝

回答

2

如何解決,要與非特殊字符的工作,以及

放在方括號你的角色,而不是逃避它們。確保如果^包含在您的字符列表中,則需要確保它不是第一個字符,或者如果它是列表中唯一的字符,則需要單獨轉義它。

虛線還需要特殊處理 - 它們需要在正則表達式的開始或結束時進行。

String delimStr = String(delim); 
String regex; 
if (delimStr.equals("^") { 
    regex = "\\^" 
} else if (delimStr.charAt(0) == '^') { 
    // This assumes that all characters are distinct. 
    // You may need a stricter check to make this work in general case. 
    regex = "[" + delimStr.charAt(1) + delimStr + "]"; 
} else { 
    regex = "[" + delimStr + "]"; 
} 
0

Q不是一個正則表達式控制字符,這樣你就不必把收到\\(只用於標記您必須解釋以下字符作爲文字處理,而不是作爲一個控制字符)。

`\\.` in a regex means "a dot" 

`.` in a regex means "any character" 

\\Q失敗,因爲Q不是regex的特殊字符,所以它不需要被引用。

我會使delim一個字符串數組,並將引號添加到這些需要它的值。

delim = {"\\|", ..... "Q"}; 
1

使用Pattern.quote並把它放在方括號似乎工作:

String regex = "[" + Pattern.quote(new String(delim)) + "]"; 

Tested with possible problem characters

+1

+1不知道我們可以安全地使用類似'[\ Qdelims \ E]'的東西'。打算髮布類似的東西,但更符合邏輯的測試,但這是最簡單的答案。 – Pshemo