gpt4 book ai didi

java - 关于Java字符串操作

转载 作者:行者123 更新时间:2023-12-02 00:56:18 25 4
gpt4 key购买 nike

在 split 命令之后,我将字符串 "MO""RET" 存储在 items[1] 数组中。存储后,我对此字符串进行了替换,它替换了所有双引号。但我希望将其存储为 MO"RET。我该怎么做。在我使用 split 命令处理的 csv 文件中,重复文本字段内容中的双引号(例如:此帐户是一个""large"" one")。因此,如果重复,我想保留字符串中间的两个引号之一,并忽略末尾引号(如果存在)。我该怎么做?

String items[] = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
items[1] has "MO""RET"
String recordType = items[1].replaceAll("\"","");

此记录类型具有 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;
}

是的,几乎没有涉及正则表达式,但它只会修剪单个字段的结尾分隔符和周围的引号。

但是,您也可以获取任何第 3 方 Java CSV API

关于java - 关于Java字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2241915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com