From dbc1c8d5c49517b322d8c6f111a205a56420ce6b Mon Sep 17 00:00:00 2001 From: Alessandro Iezzi Date: Tue, 13 Jun 2023 18:01:51 +0200 Subject: Add CSVBuilder --- .../java/it/alessandroiezzi/csv/CSVBuilder.java | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/it/alessandroiezzi/csv/CSVBuilder.java 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 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(); + } +} -- cgit v1.2.3