String.split(pattern)由于{in pattern:java.util.regex.PatternSyntaxException中的{而引发异常
我有一个Java字符串,下面是我关心的部分{3:{108:TR2011052300088} 稍后,我在{3:{108:}上做了一个拆分,出于某种原因,我一直在谷歌上搜索{and}是一个特殊字符,所以它必须转义\},而且\{显然这不起作用->编译时错误 其他人提到这是Java正则表达式中的一些错误。我真的不确定。我得到的例外是: 主线程java.util.regex.PatternSyntaxException中的异常:索引2{3:{108:at java.util.regex.Pattern.errorUnknown源附近的未关闭计数闭包 长话短说,我的代码使用{3:{108:作为分隔符拆分字符串,并在其上崩溃:String.split(pattern)由于{in pattern:java.util.regex.PatternSyntaxException中的{而引发异常,java,string,split,Java,String,Split,我有一个Java字符串,下面是我关心的部分{3:{108:TR2011052300088} 稍后,我在{3:{108:}上做了一个拆分,出于某种原因,我一直在谷歌上搜索{and}是一个特殊字符,所以它必须转义\},而且\{显然这不起作用->编译时错误 其他人提到这是Java正则表达式中的一些错误。我真的不确定。我得到的例外是: 主线程java.util.regex.PatternSyntaxException中的异常:索引2{3:{108:at java.util.regex.Pattern.e
String query="{3: {108:";
String [] messageParts = message.split(query);
我知道还有其他方法可以做到这一点,尽管更复杂,比如编写自己的解析器等等
我怎样才能拆分字符串而不使其崩溃
编辑:
要回答一些评论:
-双斜杠没有帮助:\{give\{3:\{108:MAMABEARid123}}因为两个斜杠变成了1
-使用1斜杠转义将无法编译:无效的转义序列转义{
转义{的示例:
假设您真的不需要正则表达式,我会使用的类
您可以使用Iterables.toArray从中创建一个数组,或者使用list.newArrayList创建一个列表,或者其他…假设您不需要正则表达式,我会使用的类是
您可以使用Iterables.toArray从中创建数组,或使用list.newArrayList创建列表,或其他…删除花括号,然后在冒号上拆分: 字符串inp={3:{108:TR2011052300088} System.out.printlnip.replaceAll[\\{\\}],.split:[2]
打印“TR2011052300088”删除花括号,然后在冒号上拆分: 字符串inp={3:{108:TR2011052300088} System.out.printlnip.replaceAll[\\{\\}],.split:[2]
打印“TR2011052300088”使用[{]..我以前用过正则表达式处理Swift消息,使用[{]..我以前用过正则表达式处理Swift消息,也许转义}会有帮助?它告诉你它试图解释括号。是的,但我如何转义它们\{不起作用。当你清楚地说这不起作用时,如果你说它以什么方式不起作用,它会有帮助。逃避使用\\}和\\{@Adrian看我的答案-它起作用了…也许逃避}会有帮助?它告诉你它试图解释括号。是的,但我如何逃避它们\{不起作用。当你清楚地说这不起作用时,如果你说它以什么方式不起作用,那会有帮助。为了逃避使用\\}和\\{@Adrian,请看我的答案-它起作用了…结果我不得不对我的项目进行一次干净的构建,以便能够添加\\{到一个字符串。仅供参考,我将模式与拆分结果相结合,这样在打印时转义就不同了。事实证明,我必须对我的项目进行干净的构建,以便能够将\\{添加到字符串中。仅供参考,我将模式与拆分结果相结合,这样在打印时转义就不同了
public static void main(String[] args) {
String s = "{3: {108:TR2011052300088}}";
String[] ss = s.split("\\{3: \\{108:");
System.out.println(ss[1]); //prints TR2011052300088}}
}
private static final Splitter SPLITTER = Splitter.on("{3: {108:");
...
Iterable<String> bits = SPLITTER.split(messageParts);