我有我需要解析看起来像这样Java的String.split与多个字符分隔符
"(1,0,quote),(1,0,place),(1,0,hall),(2,0,wall)"
我想将字符串分割成三胞胎的块,让我得到
1,0,quote
1,0,place
1,0,hall
2,0,wall
串
如何使用String.split执行此操作?如果我使用逗号作为分隔符,它也会分割这些词。我想用分隔符“),(”我怎样做这个
感谢
我有我需要解析看起来像这样Java的String.split与多个字符分隔符
"(1,0,quote),(1,0,place),(1,0,hall),(2,0,wall)"
我想将字符串分割成三胞胎的块,让我得到
1,0,quote
1,0,place
1,0,hall
2,0,wall
串
如何使用String.split执行此操作?如果我使用逗号作为分隔符,它也会分割这些词。我想用分隔符“),(”我怎样做这个
感谢
使用split
方法,您将得到一个包含一个空单元格的数组。改为使用Pattern
和Matcher
类。
试试这个代码,而不是:
String s = "(1,0,quote),(1,0,place),(1,0,hall),(2,0,wall)";
Pattern p = Pattern.compile("\\d+,\\d+,[^)]+");
Matcher m = p.matcher(s);
List<String> l=new ArrayList<>();
while(m.find()) {
l.add(m.group());
}
System.out.println(l);
输出
[1,0,quote, 1,0,place, 1,0,hall, 2,0,wall]
正如你所说,你可以在),(
分裂,分裂他们? - 遍历结果数组时,那么,只有你需要考虑到,那array[0]
包含一个附加(
和array[n-1]
包含一个额外的)
。
你也可以应用正则表达式来删除前缘和后支架,第一或使用子从1
到n-2
分裂之前,等等。 ..
如果用),(
分割你的字符串,你会不会在你的字符串的结尾移除开始(
和)
。考虑使用Pattern和Matcher类来查找(
)
之间的元素。
String text = "(1,0,quote),(1,0,place),(1,0,hall),(2,0,wall)";
Pattern p = Pattern.compile("\\(([^)]+)\\)");
Matcher m = p.matcher(text);
while(m.find()) {
System.out.println(m.group(1));
}
输出:
1,0,quote
1,0,place
1,0,hall
2,0,wall
如果你真的想在),(
使用split
您将需要手动删除第一(
和最后)
(分裂只会移除所有将被拆分的一部分)。你也必须避免使用括号)
(
,因为它们是正则表达式元字符(例如用于创建组)。为此,您可以在每个)
和(
之前手动添加\\
,或者您可以用\\Q
和\\E
围绕),(
将这些元素之间的字符标记为文字。但是你不必手动执行此操作。只需使用Pattern.quote
生产正则表达式与逃脱所有的元字符,并以此为split
参数一样
//I assume that `text` already removed `(` and `)` from its start and end
String[] array = text.split(Pattern.quote("),("));
使用正则表达式或写一个真正的解析器,如果你需要处理任意嵌套'()'秒。或者使用已经解决了这个问题的真正的序列化:JSON。 –
为什么不删除第一个和最后一个字符,然后用')分割它们,('就像你说的那样? – crush