From ea1d42c94f53ccb6d17c2014589e12a273e7a7ee Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Wed, 16 Jan 2019 13:33:30 +0100 Subject: [PATCH] Add a CSVUtils class for future usage. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- src/CSVUtils.java | 102 ++++++++++++++++++++++++++++++++++++++++++++++ src/Main.java | 2 +- 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/CSVUtils.java diff --git a/src/CSVUtils.java b/src/CSVUtils.java new file mode 100644 index 0000000..01d4e32 --- /dev/null +++ b/src/CSVUtils.java @@ -0,0 +1,102 @@ +import java.util.ArrayList; +import java.util.List; + + +public class CSVUtils { + + private static final char DEFAULT_SEPARATOR = ','; + private static final char DEFAULT_QUOTE = '"'; + + public static List parseLine(String cvsLine) { + return parseLine(cvsLine, DEFAULT_SEPARATOR, DEFAULT_QUOTE); + } + + public static List parseLine(String cvsLine, char separators) { + return parseLine(cvsLine, separators, DEFAULT_QUOTE); + } + + public static List parseLine(String cvsLine, char separators, char customQuote) { + + List result = new ArrayList<>(); + + //if empty, return! + if (cvsLine == null && cvsLine.isEmpty()) { + return result; + } + + if (customQuote == ' ') { + customQuote = DEFAULT_QUOTE; + } + + if (separators == ' ') { + separators = DEFAULT_SEPARATOR; + } + + StringBuffer curVal = new StringBuffer(); + boolean inQuotes = false; + boolean startCollectChar = false; + boolean doubleQuotesInColumn = false; + + char[] chars = cvsLine.toCharArray(); + + for (char ch : chars) { + + if (inQuotes) { + startCollectChar = true; + if (ch == customQuote) { + inQuotes = false; + doubleQuotesInColumn = false; + } else { + + //Fixed : allow "" in custom quote enclosed + if (ch == '\"') { + if (!doubleQuotesInColumn) { + curVal.append(ch); + doubleQuotesInColumn = true; + } + } else { + curVal.append(ch); + } + + } + } else { + if (ch == customQuote) { + + inQuotes = true; + + //Fixed : allow "" in empty quote enclosed + if (chars[0] != '"' && customQuote == '\"') { + curVal.append('"'); + } + + //double quotes in column will hit this! + if (startCollectChar) { + curVal.append('"'); + } + + } else if (ch == separators) { + + result.add(curVal.toString()); + + curVal = new StringBuffer(); + startCollectChar = false; + + } else if (ch == '\r') { + //ignore LF characters + continue; + } else if (ch == '\n') { + //the end, break! + break; + } else { + curVal.append(ch); + } + } + + } + + result.add(curVal.toString()); + + return result; + } + +} \ No newline at end of file diff --git a/src/Main.java b/src/Main.java index f7714fd..a3bc099 100644 --- a/src/Main.java +++ b/src/Main.java @@ -32,7 +32,7 @@ public class Main { personArrayList.add(person12); Person person13 = new Person("Rodolphe", "Germany", 212, 108, "black"); personArrayList.add(person13); - Person person14 = new Person("Rodolphe", "Norway", 212, 108, "blue"); + Person person14 = new Person("Rodolphe", "Norway", 173, 83, "blue"); personArrayList.add(person14); Person person15 = new Person("Abdel", "Mali", 168, 52, "black"); personArrayList.add(person15); -- 2.34.1