[英]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);
當我運行此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.