由于{in pattern:java.util.regex.PatternSyntaxException,String.split(pattern)抛出异常

时间:2012-03-07 16:04:00

标签: java string split

我在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);

我知道其他方法,虽然更复杂,比如编写我自己的解析器等。

如何进行字符串拆分而不是崩溃?

修改 回答一些意见:
  - 双斜线无效:\\{\{3:\{108:MAMABEARid123}},因为2斜线变为1   - 使用1斜杠进行转义将无法编译:转义序列无效

4 个答案:

答案 0 :(得分:6)

转义{的示例:

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

答案 1 :(得分:0)

假设你并不真正需要正则表达式,我会使用GuavaSplitter类。

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

...

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

(您可以使用Iterables.toArray从中创建数组,或Lists.newArrayList创建列表或其他内容......)

答案 2 :(得分:0)

删除大括号,然后拆分冒号:

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

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

打印'TR2011052300088'

答案 3 :(得分:-2)

使用[{] .....我在

之前使用Regex for Swift消息