我在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斜杠进行转义将无法编译:转义序列无效
答案 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)
假设你并不真正需要正则表达式,我会使用Guava的Splitter
类。
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消息