簡體   English   中英

由於{in pattern:java.util.regex.PatternSyntaxException,String.split(pattern)拋出異常

[英]String.split(pattern) throws exception due to { in pattern: java.util.regex.PatternSyntaxException

我在Java中有一個String。 以下是我關注的部分{3: {108:TR2011052300088}}

后來我在{3: {108: . 出於某種原因(我一直在谷歌搜索) {}是一個特殊字符,所以它必須被轉義\\}\\{ (顯然這不起作用 - >編譯時錯誤)。

其他人提到這是Java正則表達式中的一些錯誤。 我不確定。 我得到的例外是:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed counted closure near index 2 {3:{108: at java.util.regex.Pattern.error(Unknown Source)

長話短說,我的代碼使用{3: {108:作為分隔符並在其上崩潰來分割字符串:

String query="{3: {108:";
String [] messageParts = message.split(query);

我知道其他方法,雖然更復雜,比如編寫我自己的解析器等。

如何進行字符串拆分而不是崩潰?

編輯:回答一些意見:
- 雙斜杠無濟於事: \\\\{ give \\{3:\\{108:MAMABEARid123}}因為2斜杠變為1
- 使用1斜杠進行轉義將無法編譯:無效的轉義序列

逃避{ :的例子:

    public static void main(String[] args) {
        String s = "{3: {108:TR2011052300088}}";
        String[] ss  = s.split("\\{3: \\{108:");
        System.out.println(ss[1]); //prints TR2011052300088}}
    }

假設你不需要正則表達式,我會使用GuavaSplitter類。

private static final Splitter SPLITTER = Splitter.on("{3: {108:");

...

Iterable<String> bits = SPLITTER.split(messageParts);

(您可以使用Iterables.toArray從中創建數組,或者使用Lists.newArrayList獲取列表,或者其他......)

刪除大括號,然后拆分冒號:

String inp = "{3: {108:TR2011052300088}}";

System.out.println(inp.replaceAll("[\\\\{\\\\}]", "").split(":")[2])

打印'TR2011052300088'

使用[{] .....之前我曾使用Regex for Swift消息

暫無
暫無

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

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