You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2020/05/24 14:20:34 UTC

[commons-csv] branch master updated: [CSV-211] CSVFormat.format trims last delimiter if the delimiter is a white space (#71)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-csv.git


The following commit(s) were added to refs/heads/master by this push:
     new 3eac15f  [CSV-211] CSVFormat.format trims last delimiter if the delimiter is a white space (#71)
3eac15f is described below

commit 3eac15fc8d5a1da80119e7389f78b9795e8aa4db
Author: Chen <ch...@163.com>
AuthorDate: Sun May 24 22:20:23 2020 +0800

    [CSV-211] CSVFormat.format trims last delimiter if the delimiter is a white space (#71)
    
    * [CSV-211] fix CSVFormat.format trims last delimiter if the delimiter is a white space
    
    * [CSV-211] Add JiraCsv211Test
---
 .../java/org/apache/commons/csv/CSVFormat.java     |  4 +-
 .../apache/commons/csv/issues/JiraCsv211Test.java  | 48 ++++++++++++++++++++++
 2 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/commons/csv/CSVFormat.java b/src/main/java/org/apache/commons/csv/CSVFormat.java
index 0e068c1..e0258f3 100644
--- a/src/main/java/org/apache/commons/csv/CSVFormat.java
+++ b/src/main/java/org/apache/commons/csv/CSVFormat.java
@@ -894,7 +894,9 @@ public final class CSVFormat implements Serializable {
         final StringWriter out = new StringWriter();
         try (CSVPrinter csvPrinter = new CSVPrinter(out, this)) {
             csvPrinter.printRecord(values);
-            return out.toString().trim();
+            String res = out.toString();
+            int len = recordSeparator != null ? res.length() - recordSeparator.length() : res.length();
+            return res.substring(0, len);
         } catch (final IOException e) {
             // should not happen because a StringWriter does not do IO.
             throw new IllegalStateException(e);
diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
new file mode 100644
index 0000000..6c74cee
--- /dev/null
+++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv211Test.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.csv.issues;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.apache.commons.csv.CSVRecord;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class JiraCsv211Test {
+
+    @Test
+    public void testJiraCsv211Format() throws IOException {
+        final String[] values = new String[]{"1", "Jane Doe", "USA", ""};
+
+        final CSVFormat printFormat = CSVFormat.DEFAULT.withDelimiter('\t').withHeader("ID", "Name", "Country", "Age");
+        String formatted = printFormat.format(values);
+        assertEquals("ID\tName\tCountry\tAge\r\n1\tJane Doe\tUSA\t", formatted);
+
+        final CSVFormat parseFormat = CSVFormat.DEFAULT.withDelimiter('\t').withFirstRecordAsHeader();
+        CSVParser parser = parseFormat.parse(new StringReader(formatted));
+        for (CSVRecord record : parser) {
+            assertEquals("1", record.get(0));
+            assertEquals("Jane Doe", record.get(1));
+            assertEquals("USA", record.get(2));
+            assertEquals("", record.get(3));
+        }
+    }
+}