我有一个看起来像这样的字符串
“他说,”“什么?”“”
在整个文件中,实际上有更多这样的行,用逗号分隔。该行的输出应如下所示:
他说,“什么?!!”
我正在尝试使用此方法:
Pattern pattern = Pattern.compile("\\s*(\"[^\"]*\"|[^,]*)\\s*");
Matcher matcher = pattern.matcher(line);
while (matcher.find())
{
System.out.println(matcher.group(1));
lines.add(matcher.group(1)); //adds each line to an arraylist
}
然而,我得到的输出是:
He said,
What?
我很确定原因是我的正则表达式,因为所有这些都删除了所有的双引号。
答案 0 :(得分:1)
为什么不使用String#replaceAll
line.replaceAll("\"", "");
答案 1 :(得分:1)
这是因为你的正则表达式匹配
"He said, "
然后
"What?"
然后
""
您真正想要的是删除一级的双引号。为此,您需要使用外观断言:
Pattern pattern = Pattern.compile("\\s*\"(?!\")[^\"]*(?<!\")\"\\s*");
答案 2 :(得分:0)
形成引用字符串的过程是:
以下代码只是颠倒了这个过程:
首先删除外部双引号,然后取消内部双引号,然后拆分:
public static void main(String[] args) {
String input = "\"He said, \"\"What?\"\"\"";
String[] out = input.replaceAll("^(\")|(\")$", "").replace("\"\"", "\"").split(", ");
for (String o : out) {
System.out.println(o);
}
}
输出:
He said
"What?"