我有一個包含.csv文件替換:CSV:搜索字符串並用另一個字符串
scenario, custom, master_data
1, ${CUSTOM}, A_1
我有一個字符串:
a, b, c
,我想,以取代「定製」與'a,b,c'。我該怎麼做,並保存到現有的.csv文件?
我有一個包含.csv文件替換:CSV:搜索字符串並用另一個字符串
scenario, custom, master_data
1, ${CUSTOM}, A_1
我有一個字符串:
a, b, c
,我想,以取代「定製」與'a,b,c'。我該怎麼做,並保存到現有的.csv文件?
也許最簡單的方法是在一個文件中,並輸出讀取到另一個文件,當您去,修改它在每行的基礎
你可以嘗試用斷詞什麼的,這可能不是你完全正確輸入/輸出,但可以將其調整到您的CSV文件格式
BufferedReader reader = new BufferedReader(new FileReader("input.csv"));
BufferedWriter writer = new BufferedWriter(new FileWriter("output.csv"));
String custom = "custom";
String replace = "a, b, c";
for(String line = reader.readLine(); line != null; line = reader.readLine())
{
String output = "";
StringTokenizer tokenizer = new StringTokenizer(line, ",");
for(String token = tokenizer.nextToken(); tokenizer.hasMoreTokens(); token = tokenizer.nextToken())
if(token.equals(custom)
output = "," + replace;
else
output = "," + token;
}
readInventory.close();
如果這是一次性的東西,它也有不必研究正則表達式(這是非常強大的和有用的利益,很高興知道,但也許以後呢?)
查看Can you recommend a Java library for reading (and possibly writing) CSV files?
一旦讀取了值,搜索以${
開頭並以}
結尾的字符串/值。使用Java Regular Expressions,如\$\{(\w)\}
。然後使用一些地圖查找找到的密鑰和相關的值。 Java Properties將是一個很好的候選人。
然後寫一個新的csv文件。
由於您的替換字符串非常獨特,因此您可以快速完成該任務,無需通過將文件讀入緩衝區,然後將該緩衝區轉換爲字符串來進行復雜的解析。將您希望替換的所有文本替換爲您的目標文本。然後將字符串轉換爲緩衝區並將其寫回文件...
Pattern.quote是必需的,因爲您的字符串是正則表達式。如果你不引用它,你可能會遇到意想不到的結果。
另外,覆蓋源文件通常不太智能。最好的辦法是創建一個新文件,然後刪除舊文件,並將新文件重命名爲舊文件。任何中途的錯誤將不會刪除您的所有數據。
final Path yourPath = Paths.get("Your path");
byte[] buff = Files.readAllBytes(yourPath);
String s = new String(buff, Charset.defaultCharset());
s = s.replaceAll(Pattern.quote("${CUSTOM}"), "a, b, c");
Files.write(yourPath, s.getBytes());
一般情況下,您不保存到現有的'.csv'文件 - 保存到臨時文件,然後用它替換舊文件。 – RealSkeptic