我必须在“ 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], 29sdf@s
[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] 删除。
我来说两句