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 String Split
Pattern IND|TEST|
Pattern |Cricket|
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
***
^
为什么默认的JDK不会给我所需的结果,而是异常...以及获取值的模式应该是什么
此致
答案 0 :(得分:6)
你需要转义'*',因为它是正则表达式中的一个特殊字符:
patterns = bal.split("\\*\\*\\*");
答案 1 :(得分:1)
*
表示" 0或更多"。这是一个必须在正则表达式字符串中转义的特殊字符。此外,由于\
是字符串的特殊字符,因此也必须进行转义。
String[] patterns = org.springframework.util.StringUtils.split(bal, "\\*\\*\\*");
答案 2 :(得分:1)
split
使用正则表达式*
字符作为其主要参数。 *
是一个wilcard字符,用于匹配0个或多个字符,需要进行转义。作为替代方案你可以做到
patterns = bal.split(Pattern.quote("***"));
答案 3 :(得分:1)
String#split
使用正则表达式作为参数,而由方法呈现的其余部分使用文字。如果要将正则表达式转换为其文字表示,则需要转义其所有元字符
您可以像\\*
,[*]
一样手动执行此操作,或者只使用Pattern.quote
之类的方法为您执行此操作
bal.split(Pattern.quote("***"))