[英]String split with delimiter as *** in Java
public class TestStringSplit {
public static void main(String[] args) {
String bal = "IND|TEST|***|Cricket|***";
String[] patterns = org.springframework.util.StringUtils.split(bal,
"***");
System.out.println("SPRING Framework String Split");
for (String pt : patterns) {
System.out.println("Pattern " + pt);
}
System.out.println("************************");
patterns = org.apache.commons.lang.StringUtils.split(bal,
"***");
System.out.println("Apache Commons Lang String Split");
for (String pt : patterns) {
System.out.println("Pattern " + pt);
}
System.out.println("************************");
patterns = bal.split("***");
System.out.println("JDK String Split");
for (String pt : patterns) {
System.out.println("Pattern " + pt);
}
}
}
以上結果是
SPRING框架字符串拆分
Pattern IND|TEST|
Pattern |Cricket|***
Apache Commons Lang字符串拆分
Pattern IND|TEST|
Pattern |Cricket|
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
***
^
為什么默認的JDK沒有給我所需的結果,而是給我一個例外呢?以及獲取值的模式應該是什么?
問候
您需要轉義'*',因為它是正則表達式中的特殊字符:
patterns = bal.split("\\*\\*\\*");
正則表達式中的*
表示“ 0或更大”。 這是一個特殊字符,必須在正則表達式字符串中轉義。 另外,由於\\
是字符串的特殊字符,因此也必須轉義。
String[] patterns = org.springframework.util.StringUtils.split(bal, "\\*\\*\\*");
split
使用正則表達式*
字符作為其主要參數。 *
是通配符,用於匹配0個或多個字符,需要進行轉義。 作為替代,你可以做
patterns = bal.split(Pattern.quote("***"));
String#split
使用正則表達式作為參數,而其余的方法則使用文字。 如果要將正則表達式轉換為其文字表示形式,則需要轉義其所有元字符。
您可以像\\\\*
, [*]
這樣手動完成操作,也可以使用Pattern.quote
這樣的方法來為您完成此操作
bal.split(Pattern.quote("***"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.