我知道如何对String进行标记,但问题是我想将其标记为如下所示。
String st = "'test1, test2','test3, test4'";
我尝试的内容如下:
st.split(",");
这给我的输出为:
'test1
test2'
'test3
test4'
但我希望输出为:
'test1, test2'
'test3, test4'
我该怎么做?
答案 0 :(得分:3)
由于单引号为not mandatory,split
将无效,因为Java的正则表达式引擎不允许使用可变长度的lookbehind表达式。这是一个使用正则表达式匹配内容的简单解决方案,而不是分隔符:
String st = "'test1, test2','test3, test4',test5,'test6, test7',test8";
Pattern p = Pattern.compile("('[^']*'|[^,]*)(?:,?)");
Matcher m = p.matcher(st);
while (m.find()) {
System.out.println(m.group(1));
}
您可以通过更改引用子字符串的“内容”部分来添加转义单引号的语法(当前,它是[^']*
,意思是“除了单引号重复零次或多次之外的任何内容”。
答案 1 :(得分:1)
最简单可靠的解决方案是使用CSV解析器。也许Commons CSV会有所帮助。
它将根据CSV规则对字符串进行扫描。因此,即使''
可以在值中使用而不会破坏它。
示例代码如下: ByteArrayInputStream baos = new ByteArrayInputStream(“'test1,test2','test3,test4'”。getBytes());
CSVReader reader = new CSVReader(new InputStreamReader(baos), ',', '\'');
String[] read = reader.readNext();
System.out.println("0: " + read[0]);
System.out.println("1: " + read[1]);
reader.close();
这将打印:
0: test1, test2
1: test3, test4
如果您使用maven,则只需导入依赖项:
<dependency>
<groupId>net.sf.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>2.0</version>
</dependency>
然后开始使用它。