2017-04-18 88 views
-2

我已經在那裏的話用逗號在每行隔開,像一個CSV文件:爲什麼CSV閱讀器(Java)在讀取行時以逗號加空格?

字詞1,word2和WORD3,word4

的word5,word6,word7,word8 ...等等。

我能夠分析它,並宣讀行,但是當我打印逗號後面返回空格線:

字詞1,word2和WORD3 .....

BufferedReader r = new BufferedReader(new InputStreamReader(new BlobstoreInputStream(blobKey))); 

      @SuppressWarnings("resource") 
      /*readinf from blob file*/ 
      CSVReader reader = new CSVReader(r,','); 
      String[] nextLine; 
      List<String> lines = new ArrayList<>(); 
      while ((nextLine = reader.readNext()) != null) 
      { 
       System.out.print(Arrays.toString(nextLine)+"\n"); 
      } 

哪有我刪除空間並獲得「word1,word2,word3 ....」?

更新:我只需要刪除逗號之後的空格,而不是逗號之間的單詞之間的空格。 (「word1 another word2,word3,word4 and word5」--->「word1 another word2,word3,word4 and word5」

回答

1

當您使用Arrays.toString輸出數組時,正在添加該空間它不是CSV閱讀器那是做什麼的

如果你想在逗號後沒有空格的排列格式,可以使用StringJoiner例如在Java中8,你可以這樣寫:。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4); 
String commaSeparatedNumbers = numbers.stream() 
    .map(i -> i.toString()) 
    .collect(Collectors.joining(",")); 

如果需要使用Java 7或更早:

  • 很久以前就向您的經理指出Java 7已經終結,並且繼續使用它是一種安全風險,並且不利於代碼質量的前進。
  • 您可以實現使用循環的StringJoiner和使用約5行代碼的StringBuilder ...。

    StringBuilder sb = new StringBuilder(); 
    for (String s: array) { 
        if (sb.length() > 0) sb.append(","); 
        sb.append(s); 
    } 
    System.out.println(sb); 
    
+0

確定,但我需要使用Java 1.7。有一種方法可以在逗號之後沒有空格的情況下檢索行嗎?就像,你知道,刪除空格後正則表達式或類似的 – boso92

+0

我會建議不要後處理格式化的字符串。如果CSV的字段包含空格和/或逗號,則會出現令人討厭的意外。 –