簡體   English   中英

在Java中使用分隔符將字符串拆分為***

[英]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.

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