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));
+ }
+ }
+}