簡體   English   中英

按字符數組拆分字符串

[英]Split string by array of characters

我想按字符數組拆分一個字符串,所以我有這個代碼:

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

一切正常,除非我想在delim []數組中添加像'Q'這樣的字符,它會拋出異常:

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

那么如何解決這個問題呢?

提前致謝

我怎么能解決這個問題,以便與非特殊字符一起使用

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

破折號還需要特殊處理 - 它們需要在正則表達式的開頭或結尾處進行。

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 + "]";
}

使用Pattern.quote並將其放在方括號中似乎工作:

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

測試可能的問題字符

Q不是正則表達式中的控制字符,因此您不必在它之前放置\\\\ (它僅用於標記您必須將以下字符解釋為文字,而不是控制字符)。

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

`.` in a regex means "any character"

\\\\Q失敗,因為Q在正則表達式中不是特殊字符,因此不需要引用。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM