字符串在Java中用分隔符分割为***

时间:2014-04-07 15:58:40

标签: java string spring

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不会给我所需的结果,而是异常...以及获取值的模式应该是什么

此致

4 个答案:

答案 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("***"))