簡體   English   中英

Java:解析以“,”和換行符分隔的CSV

[英]Java: Parse CSV that is separated by “,” and new line

所以我有一個CSV,它的數據格式類似:

a,b,c,d
e,f,g,h
i,j,k,l

我可以用“,”來解析它,但是問題是當我到達d所在的點時,它將解析為:“ de”

我該如何解決,以便可以將d和e視為單獨的? 有沒有辦法解析“,”或“換行”?

 Scanner scanner;
    try {
        scanner = new Scanner(new File("C:/Users/Desktop/orders.csv"));

        //Set the delimiter used in file
        scanner.useDelimiter(",");

        //Get all tokens and store them in some data structure
        //I am just printing them
        while (scanner.hasNext())
        {
            orders++;
            //System.out.print(scanner.next() + "\n");
            //System.out.println(orders);
            System.out.println("Order = " + scanner.next());
            scanner.next(); //Email
            scanner.next(); //Finacial
            scanner.next(); //Paid at
            scanner.next(); //Fulfillment status
            scanner.next(); //Fulfillment at
            scanner.next(); //Accept
            scanner.next(); //Currency
            scanner.next(); //Subtotal
            System.out.println("SHIPPING: " + scanner.next()); //Shipping
            scanner.next(); //Tax
            scanner.next(); //Total
            scanner.next(); //Discount Code
            scanner.next(); //Discount Amount
            scanner.next(); //Shipping Method
            scanner.next(); //Created at
            scanner.next(); //Lineitem Quantity
            scanner.next(); //Lineitem Name
            scanner.next(); //Lineitem Price
            scanner.next(); //Lineitem compare at price
            scanner.next(); //Lineitem SKU
            scanner.next(); //Lineitem requires shipping
            scanner.next(); //Lineitem Taxable
            scanner.next(); //Lineitem Fulfillment status
            scanner.next(); //Billing Name
            scanner.next(); //Billing Street
            scanner.next(); //Billing address1
            scanner.next(); //Billing address2
            scanner.next(); //Billing Company
            scanner.next(); //Billing City
            scanner.next(); //Billing Zip
            scanner.next(); //Billing providence
            scanner.next(); //Billing country
            scanner.next(); //Billing phone
            scanner.next(); //Shipping name
            scanner.next(); //Ship street
            scanner.next(); //Ship address1
            scanner.next(); //Ship address2
            System.out.println(scanner.next()); //Shipping company
            scanner.next(); //Shipping city
            scanner.next(); //Shipping zip
            scanner.next(); //Shipping providence
            scanner.next(); //Shipping country
            scanner.next(); //Shipping phone
            scanner.next(); //Notes
            System.out.println(scanner.next()); //Notse attributes
            scanner.next(); //TX State Tax
            scanner.next(); //Mckinney Municipal Tax
            System.out.println(scanner.next()); //Cancelled at
            scanner.next(); //Payment method
            System.out.println(scanner.next()); //Payment reference
            scanner.next(); //Refunded amount
            scanner.next(); //Vendor
            scanner.next(); //Id
            System.out.println(scanner.next()); //Tags
            scanner.next(); //Risk level
            scanner.next(); //Source
            System.out.println(scanner.next()); //Lineitem Discount + NEXT order PROBLEM IS HERE!!

            System.out.println("NEXT"); 
        }

        //Do not forget to close the scanner 
        scanner.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

還要使用定界符“ \\ n”,這樣您的令牌將在逗號和換行符處進行拆分。

我建議您使用現有的解析器,以簡化您的工作。
例如,使用opencsv,您可以定義自己的定界符,引號字符...

如果您絕對想編寫自己的代碼,則必須先使用掃描儀將行分開,然后再拆分每行:

Scanner scanner = new Scanner(new File("C:/Users/Desktop/orders.csv"));
scanner.useDelimiter("\n");
while (scanner.hasNext()) {
    String[] values = scanner.next().split(",");
    System.out.println(values[0]); // Email
    // Etc.
}

暫無
暫無

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

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