肯定會有一堆API會爲你做到這一點,但爲什麼不自己做這樣一個簡單的情況呢?它會爲你節省一個依賴項,對任何規模的項目來說都是一件好事。
在Metadata
中創建一個toCsvRow()
方法,該方法連接用逗號分隔的字符串。
public String toCsvRow() {
return Stream.of(page, document, loan, type)
.map(value -> value.replaceAll("\"", "\"\""))
.map(value -> Stream.of("\"", ",").anyMatch(value::contains) ? "\"" + value + "\"" : value)
.collect(Collectors.joining(","));
}
收集此方法的結果,每隔Metadata
對象由新行分隔。
String recordAsCsv = record.stream()
.map(Metadata::toCsvRow)
.collect(Collectors.joining(System.getProperty("line.separator")));
編輯 如果你不會這麼幸運,有Java的8,並在您的處置流API,這將使用傳統的名單幾乎一樣簡單。
public String toCsvRow() {
String csvRow = "";
for (String value : Arrays.asList(page, document, loan, type)) {
String processed = value;
if (value.contains("\"") || value.contains(",")) {
processed = "\"" + value.replaceAll("\"", "\"\"") + "\"";
}
csvRow += "," + processed;
}
return csvRow.substring(1);
}
爲什麼不。那麼javacsv呢? – Satya