[英]How to parse a comma separated line (CSV) with some items in quotation marks?
[英]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.