簡體   English   中英

關於Java Split命令解析Csv文件

[英]Regarding Java Split Command Parsing Csv File

我有一個以下格式的csv文件。

H,"TestItems_20100107.csv",07/01/2010,20:00:00,"TT1198","MOBb","AMD",NEW,,

我需要split命令忽略雙引號內的逗號。 所以我在之前的帖子中使用了下面的split命令。 粘貼我使用此命令的URL

String items[] = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
System.out.println("items.length"+items.length);

Java:拆分以逗號分隔的字符串,但忽略引號中的逗號

當我運行此CSV數據時,我將items.length打印為8.“NEW”之后的行尾的最后兩個逗號將被忽略。 我希望split命令能夠獲取這些逗號,然后將長度返回為10.如果它在最后,則不會拾取空逗號,但是如果它位於字符串的中間,它會將其拾取。 不確定我需要在split命令中修改什么來解決此問題。 同樣在csv文件中可以重復文本字段內容中的雙引號(例如“此帳戶是”“大”“一”)

正則表達式沒有錯。 問題是拆分在最后丟棄空匹配:

此方法的作用就像通過調用具有給定表達式和limit參數為零的雙參數split方法一樣。 因此,結尾的空字符串不包含在結果數組中。

解決方法是提供一個大於CSV文件中所需列數的參數:

 String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99);

我今天遇到了同樣的問題,並為csv文件找到了一個簡單的解決方案:在執行拆分時添加一個僅包含一個空格的額外字段:

(line + ", ").split(",");

這樣,無論csv文件末尾可能存在多少個連續的空字段,split()將始終返回n + 1個字段

示例會話(使用bsh)

bsh % line = "H,\"TestItems_20100107.csv\",07/01/2010,20:00:00,\"TT1198\",\"MOBb\",\"AMD\",NEW,,
bsh % System.out.println(line);
H,"TestItems_20100107.csv",07/01/2010,20:00:00,"TT1198","MOBb","AMD",NEW,,
bsh % String[] items = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
bsh % System.out.println(items.length);
8
bsh % items = (line + ", ").split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
bsh % System.out.println(items.length - 1 );
10
bsh %

暫無
暫無

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

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