java - 验证 CSV 中的特定列

标签 java csv

我正在验证 CSV 文件中的特定列,我基本上有两种方法,即

  • 方法 1 我可以使用 BufferedReader 逐行读取 CSV 文件,然后停止 我打了一行以我正在寻找的东西开头

    try {   
         BufferedReader br = new BufferedReader(
             new InputStreamReader(item.getInputStream()));
    String strLine = "";
    StringTokenizer st = null;
    String value = "";
    while ((strLine = br.readLine()) != null) {
        st = new StringTokenizer(strLine, ",");
        while (st.hasMoreTokens()) {
            value = st.nextToken();
            if ((value != null) && (("MyString1".equals(value)
                || ("MyString2".equals(value)
                || ("MyString3".equals(value)))  {
                // Send error Message   
            }
        }
    }
    
  • 第二种方法是使用 String.split 如下

    Scanner s = new Scanner(item.getInputStream());  
    while(s.hasNextLine()) {  
        String[] fields = s.nextLine().split("\\s*,\\s*", -1);  
        for(int i = 0;i < fields.length;i++) {  
            if(!"".equals(fields[i]) && ...  
        }  
    }  
    s.close();
    

请提出更好的方法

最佳答案

不要编写自己的 CSV 解析器。 CSV 实际上比您最初想象的要复杂。 (示例:多行值、封装字段、转义字符等等。逗号并不总是分隔字段!)

Use opencsv ,这是一个功能齐全的纯 Java CSV 解析器。

此解析器将轻松让您循环遍历 CSV 文件,并处理各个列和行。上面的链接中给出了示例。

编辑:另外,我忘了提及,它是 Apache2 许可的,因此可以安全地嵌入到商业项目中!

关于java - 验证 CSV 中的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6907244/

相关文章:

java - 从 Activity 中的异步任务获取值(value)

java - 如何使用 Slf4j 的 Logback 实现通过 Spring 记录 SOAP 客户端消息

python - 使用python打开csv文件

java - 将单个 csv 对象存储到数组中

r - 导入多个 csv 文件并为每个文件添加年份

java - 使用什么代替 sun.net.www.protocol.http.HttpURLConnection.userAgent?

java - 在 Android 应用程序中将两部手机/用户链接在一起

Java:最终字符串比较不起作用

Python数据错误: ValueError: invalid literal for int() with base 10: '42152129.0'

Python 内存错误 : cannot allocate array memory