diff --git a/src/BusinessCardManagement.java b/src/BusinessCardManagement.java index a6e4385..0ee21eb 100644 --- a/src/BusinessCardManagement.java +++ b/src/BusinessCardManagement.java @@ -156,7 +156,7 @@ List lines = Files.readAllLines(selectedFile.toPath(), CHARSET); for (int i = 1; i < lines.size(); i++) { String line = lines.get(i); - String[] value = line.split(",", -1); + String[] value = parseCSV(line); String companyName = value[0]; if (! businessCardData.containsKey(companyName)) { businessCardData.put(companyName, new ArrayList<>()); @@ -185,6 +185,46 @@ } } } + + private String[] parseCSV(String line) { + List result = new ArrayList<>(); + StringBuilder field = new StringBuilder(); + + boolean inQuotes = false; + boolean escape = false; + + for (int i = 0; i < line.length(); i++) { + char c = line.charAt(i); + + if (escape) { + field.append(c); + escape = false; + continue; + } + + if (c == '\\') { + escape = true; + continue; + } + + if (c == '"') { + inQuotes = !inQuotes; + continue; + } + + if (c == ',' && !inQuotes) { + result.add(field.toString()); + field.setLength(0); + continue; + } + + field.append(c); + } + + result.add(field.toString()); + + return result.toArray(new String[0]); + } public void load() { try { @@ -194,7 +234,7 @@ } List lines = Files.readAllLines(path, CHARSET); for (String line : lines) { - String[] values = line.split(",", -1); + String[] values = parseCSV(line); BusinessCardManagementElement businessCard = new BusinessCardManagementElement( values[1], @@ -232,7 +272,6 @@ } } - public void save(String curScreen, String wid, int state) { if (state != 0) { return;