Ara*_*rav 2 java string replaceall
我在split命令之后将字符串"MO""RET"存储在items[1]数组中.在它存储之后,我在这个字符串上做一个替换,它取代了所有的双引号.但我希望它存储为MO"RET.我该怎么做.在我使用split命令处理的csv文件中重复文本字段内容中的双引号(例如:此帐户是""large""一个").所以我想保留字符串中间的两个引号之一,如果它如果存在则重复并忽略最终引号.我该怎么做?
String items[] = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
items[1] has "MO""RET"
String recordType = items[1].replaceAll("\"","");
Run Code Online (Sandbox Code Playgroud)
在这个recordType之后MORET 我希望它有MO"RET
不要使用正则表达式来拆分CSV行.这是在寻找麻烦;)只是逐个字符地解析它.这是一个例子:
public static List<List<String>> parseCsv(InputStream input, char separator) throws IOException {
BufferedReader reader = null;
List<List<String>> csv = new ArrayList<List<String>>();
try {
reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
for (String record; (record = reader.readLine()) != null;) {
boolean quoted = false;
StringBuilder fieldBuilder = new StringBuilder();
List<String> fields = new ArrayList<String>();
for (int i = 0; i < record.length(); i++) {
char c = record.charAt(i);
fieldBuilder.append(c);
if (c == '"') {
quoted = !quoted;
}
if ((!quoted && c == separator) || i + 1 == record.length()) {
fields.add(fieldBuilder.toString().replaceAll(separator + "$", "")
.replaceAll("^\"|\"$", "").replace("\"\"", "\"").trim());
fieldBuilder = new StringBuilder();
}
if (c == separator && i + 1 == record.length()) {
fields.add("");
}
}
csv.add(fields);
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
return csv;
}
Run Code Online (Sandbox Code Playgroud)
是的,涉及的正则表达式很少,但它只会修剪结束分隔符和单个字段的周围引号.
但是,您也可以使用任何第三方Java CSV API.
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |