summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/it/alessandroiezzi/csv/CSVBuilder.java68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/main/java/it/alessandroiezzi/csv/CSVBuilder.java b/src/main/java/it/alessandroiezzi/csv/CSVBuilder.java
new file mode 100644
index 0000000..fb7367c
--- /dev/null
+++ b/src/main/java/it/alessandroiezzi/csv/CSVBuilder.java
@@ -0,0 +1,68 @@
+/* See LICENSE file for copyright and license details. */
+
+package it.alessandroiezzi.csv;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+/**
+ * Used to generate a CSV.
+ */
+public class CSVBuilder {
+ private final String[] header;
+ private final List<String[]> rows = new ArrayList<>();
+ private String separator = ",";
+
+ private String buildRow(String...row) {
+ /* build a CSV row with the separator symbol */
+ StringBuilder csvRow = new StringBuilder();
+
+ for (int i = 0; i < row.length; i++) {
+ /* first column hasn't a separator */
+ if (i > 0) csvRow.append(separator);
+ csvRow.append(row[i]);
+ }
+
+ return csvRow.toString();
+ }
+
+ public CSVBuilder(String...header) {
+ this.header = header;
+ }
+
+ public CSVBuilder append(String...row) {
+ if (row.length != header.length)
+ throw new IllegalArgumentException("The number of columns does not match the header");
+ rows.add(row);
+
+ return this;
+ }
+
+ public String build() {
+ StringBuilder csv = new StringBuilder(buildRow(header));
+ /* add a newline after the header */
+ csv.append("\n");
+
+ int i = 0, n = rows.size();
+ for (String[] row : rows) {
+ csv.append(buildRow(row));
+ if (i++ < n - 1) csv.append("\n");
+ }
+
+ return csv.toString();
+ }
+
+ public CSVBuilder withSeparator(String separator) {
+ this.separator = separator;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ return build();
+ }
+}