簡體   English   中英

Java CSV閱讀器,讀取剩余數據

[英]Java CSV Reader, reading remaining data

我有CSV數據,如下所示:

1,mm/dd/yy,"abc,def,"pqr",xyz"

我想將其解析為3個字符串。

  1. 1

  2. MM / DD / YY

  3. 所有剩余的數據,在這種情況下為“ abc,def,” pqr“,xyz”

我嘗試了幾個庫,openCSV,javacsv等。它們似乎都可以解析並標記最后一列。 我想要的是將第二列之后的數據作為單個令牌保留。

有任何想法嗎 ?

您應該更新輸入數據以用單引號將第三列括起來,如下所示:1,mm / dd / yy,'abc,def,“ pqr”,xyz'

否則,您將永遠無法正確解析csv數據。

使用更新后的數據,您可以調用功能強大的開源庫uniVocity-parsers以僅幾行即可正確讀取數據:

public static void main(String[] args) throws FileNotFoundException {
    // 1st, config the CSV reader
    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setLineSeparator("\n");
    settings.getFormat().setQuote('\'');        // set the quote to single quote '
    settings.getFormat().setQuoteEscape('\\');  // escape the double quote "

    // 2nd, creates a CSV parser with the configs
    CsvParser parser = new CsvParser(settings);

    // 3rd, parses all rows from the CSV file into a 2-dimensional array
    List<String[]> resolvedData = parser.parseAll(new StringReader("1,mm/dd/yy,'abc,def,\"pqr\",xyz'"));
    for (String[] row : resolvedData) {
        StringBuilder strBuilder = new StringBuilder();
        for (String col : row) {
            strBuilder.append(col).append("\t");
        }
        System.out.println(strBuilder);
    }
}

您將獲得如下輸出:

1毫米/日/年abc,def,“ pqr”,xyz

int firstCommaIndex = s.indexOf(',');
int secondCommaIndex = s.indexOf(',', firstCommaIndex + 1);
String firstPart = s.substring(0, firstCommaIndex);
String secondPart = s.substring(firstCommaIndex + 1, secondCommaIndex);
String lastPart = s.substring(secondCommaIndex + 1);

嘗試SuperCSV 它具有quoteChar配置選項,似乎可以表達對引用文本的處理。

您可以在https://github.com/CyborTronik/fluent-ssv上使用自定義LineParser

它也可以將CSV數據轉換為bean,但是對於日期類型,您將需要提供ValueConverter的自定義實現,否則您可以將其存儲為字符串然后進行操作。

因此代碼如下所示:

new SsvStreamBuilder<MyBean>()
  .forEntity(MyBean.class)
  .withLineParser(new MyLineParser())
  .withValueConverter(new MyDateConverter())
  .stream("~/some/csv/file");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM