在链接列表Java中读取CSV文件

潘卡伊

我必须在“ Functionality.java”类中实现名为“ csvToList”的静态公共方法。该方法获取字符串作为输入参数,并返回LinkedList <String []>。

签名:csvToList(字符串路径):LinkedList <String []>

该方法读取路径中的CSV文件。每条线分为两部分。这两个部分始终以逗号分隔。通过删除前面和后面的任何空格对这两个部分进行标准化,并存储在字符串数组中。这两对string []被添加到列表中。包含两对的列表将被返回。

该算法必须满足以下要求:

第一行不应读入,因为它仅包含列信息。行的规范化条目应位于字符串数组中。行的各个元素在字符串数组中不应包含任何空格。如果读取文件时抛出IOException,则应返回null。为此使用try&catch。我的代码:

import java.io.BufferedReader;
import java.util.LinkedList
public class Functionality{
public static LinkedList<String[]> csvToList(String path) {

    LinkedList<String[]> list = new LinkedList<String[]>();

    try {
        BufferedReader br = new BufferedReader(new FileReader(path));
        
        br.lines()
        .filter(line -> br.getLineNumber() > 1)
        .forEach(line -> {

        String[] fields = path.split(",");

        String mail = fields[0].trim();
        String password = fields[1].trim();
        String[] csv = { mail, password };

        list.add(csv);

        br.close();

        return list;

        } catch (IOException e) {   
        return null;
    }
    
    }
}

}

CSV文件:

Mail,Passwort
[email protected], sfkjiwefsdkfl
[email protected], [email protected]
[email protected], abc
[email protected], wild

有没有更好的方法来实现算法

兹威瑟洛特

我必须在“ Functionality.java”类中实现名为“ csvToList”的静态公共方法。该方法获取字符串作为输入参数,并返回LinkedList <String []>。

嗯,为什么?

LinkedList几乎总是一个错误。像糖蜜一样慢。不仅在算法上,LinkedList趋于缓慢,即使从理论上讲它应该是快速的:因为它使跟踪器对象成为现实,所以它可以执行所有不应该在所有内存访问都通过缓存页面(以及所有现代程序)的CPU上做的事情。CPU以这种方式工作)。同样,混合泛型和数组是一个严重的错误。它“起作用”,但会在整个地方引起摩擦。难以测试和编写的不可读代码。

这应该使一个List<List<String>>当然不是String[],当然不是LinkedList,在任何情况下。

new FileReader(path)

不,不要那样做。这使用“平台默认字符集编码”。你不要那样 使用新的文件API,它更易于使用,默认为UTF-8。

该方法读取路径中的CSV文件。

其实,没关系。读取CSV比您想象的要复杂得多。当然,这比split您能做的要复杂得多使用诸如SuperCSV之类的CSV阅读器库CSV可以包含引号,多行字符串等。

} catch (IOException e) {   
   return null;
}

不要这样 忽略错误不是您应该轻易做的事情。如果您不知道如何处理错误,throw new RuntimeException("Unhandled", e);那就在catch块中是想要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章