如何解析String str = "abc, \"def,ghi\""
;
这样我得到的输出为
String[] strs = {"abc", "\"def,ghi\""}
即。一个长度为2的数组。
我应该使用正则表达式还是java api或任何其他开源中的任何方法
让我这样做的项目?
被修改
要提供有关问题的背景信息,我正在阅读一个文本文件,其中每行有一个记录列表。每条记录都有以分隔符(逗号或分号)分隔的字段列表。现在我有一个要求,我必须支持文本限定符一些excel或开放办公室支持。假设我有记录
abc,“def,ghi”
在这里,是我的分隔符和“是我的文本限定符,这样当我解析这个字符串时,我应该得到两个字段abc和def,ghi not {abc,def,ghi}
希望这能清除我的要求。
由于
谢加
答案 0 :(得分:5)
基本算法并不太复杂:
public static List<String> customSplit(String input) {
List<String> elements = new ArrayList<String>();
StringBuilder elementBuilder = new StringBuilder();
boolean isQuoted = false;
for (char c : input.toCharArray()) {
if (c == '\"') {
isQuoted = !isQuoted;
// continue; // changed according to the OP comment - \" shall not be skipped
}
if (c == ',' && !isQuoted) {
elements.add(elementBuilder.toString().trim());
elementBuilder = new StringBuilder();
continue;
}
elementBuilder.append(c);
}
elements.add(elementBuilder.toString().trim());
return elements;
}
答案 1 :(得分:2)
这个问题似乎合适:Split a string ignoring quoted sections
沿着那条线,http://opencsv.sourceforge.net/似乎是恰当的。
答案 2 :(得分:0)
试试这个 -
String str = "abc, \"def,ghi\"";
String regex = "([,]) | (^[\"\\w*,\\w*\"])";
for(String s : str.split(regex)){
System.out.println(s);
}
答案 3 :(得分:0)
尝试:
List<String> res = new LinkedList<String>();
String[] chunks = str.split("\\\"");
if (chunks.length % 2 == 0) {
// Mismatched escaped quotes!
}
for (int i = 0; i < chunks.length; i++) {
if (i % 2 == 1) {
res.addAll(Array.asList(chunks[i].split(",")));
} else {
res.add(chunks[i]);
}
}
这只会拆分不在转义引号之间的部分。
如果你想摆脱空白,请调用trim()。