我需要将一个字符串拆分成数组。
String test = "test (18,2,3) ,(,Test (,)), Test";
我希望用不在括号内的逗号分隔。这就是我需要的东西
test (18,2,3)
(,Test (,))
Test
我试过
String test = "test (18,2,3) , (,Test (,)) , Test";
String colVals [] = test.split("[^(.*,.*)] | ,");
System.out.println(colVals[0]);
System.out.println(colVals[1]);
System.out.println(colVals[2]);
但结果不是我所期待的
答案 0 :(得分:1)
我不知道您是否可以控制CSV格式;如果没有,请忽略这个答案。
你应该有一个用CSV转义文字逗号的系统。不幸的是,没有单一的标准可以做到这一点。有些人使用反斜杠:
test (18\,2\,3) ,(\,Test (\,)), Test
其他人使用可选的引号:
"test (18,2,3) ","(,Test (,))", Test
另一种选择是使用制表符而不是逗号,如果您知道不存在任何文字制表符(或者如果有,则将其更改为\t
)。我将使用->
来表示制表符:
test (18,2,3) ->(,Test (,))-> Test
注意:这些是字符串本身 - 字符串文字需要进一步转义:test = "test (18\\,2\\,3) ,(\\,Test (\\,)), Test"
,test = "\"test (18,2,3) \",\"(,Test (,))\", Test"
或test = "test (18,2,3) \t(,Test (,))\t Test"
。
如果您使用这些方法之一,您可能会找到用于解析CSV的库。或者,如果您使用标签而不是逗号,只需按照之前的操作进行操作,然后拆分标签。
如果你手上有太多时间,你可以尝试自己写点什么来做。我不认为它可以以相同的方式完成 - 但是你必须编写一个与逗号之间的子串(而不是逗号本身)匹配的正则表达式,然后创建一个java.util.regex .Matcher对象,使用matcher.find()
遍历字符串,并对匹配的子字符串中包含的任何反斜杠进行unescape。