Java 如何计算csv文件中的总人数?
给定以下代码:Java 如何计算csv文件中的总人数?,java,csv,Java,Csv,给定以下代码: import java.util.Arrays; import java.util.List; import java.util.Map; /** * siehe Zettel 0 - Aufgabe 2 */ public class PrintCSV_Task2 { private static String FILENAME = "data.csv"; public static void main(String[] args)
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* siehe Zettel 0 - Aufgabe 2
*/
public class PrintCSV_Task2 {
private static String FILENAME = "data.csv";
public static void main(String[] args) {
System.out.println("---(Ausgabe) Aufgabe 2.1---");
printAll_CSV_NUM(ReadCSV_Task2.fetchAll_CSV_NUM(FILENAME));
System.out.println("---(Ausgabe) Aufgabe 2.2---");
printAll_CSV_ASSOC(ReadCSV_Task2.fetchAll_CSV_ASSOC(FILENAME));
System.out.println("Compiled, no syntactical failures =)");
}
/**
* Aufgabe 2.1
* @param csvData die Daten der CSV
*/
public static void printAll_CSV_NUM(List<String[]> csvData) {
csvData.stream().map(entry -> Arrays.stream(entry).reduce(
"", //init
(e1, e2) -> (e1.equals("")) ? e2 : (e1 + "; " + e2)) //concat
).forEach(System.out::println);
}
/**
* Aufgabe 2.2
* @param csvData die Daten der CSV
*/
public static void printAll_CSV_ASSOC(List<Map<String, String>> csvData) {
csvData.stream().map(entry -> entry.entrySet().stream().reduce(
new StringBuilder(), //init
(s, e) -> s.append(s.length() == 0 ? "" : "; ").append(e.getKey()).append(':') .append(e.getValue()), //concat String with MapEntry
(s1, s2) -> s1.append(s1.length() == 0 ? "" : "; ").append(s2) //concat already converted MapEntry_ies (String) with another
)).forEach(System.out::println);
}
}
(包含1000个条目)
计数的功能是
public static int countCsvData_CSV_NUM(List<String[]> csvData)
public static int countCsvData\u CSV\u NUM(列出csvData)
data.csv文件是一个excel文件,如下所示:
PersonID Name Geburtsjahr Stadt
0 Hans Müller 1988 Köln
不,不是。excel文件以.xls
或.xlsx
结尾,但看起来不是这样,它看起来像是毫无意义的gobbledygook(它是一种二进制格式)
它是一个csv文件:“字符分隔值”。希望分隔它们的字符是tab字符。有一种称为固定长度记录文件的不同数据格式,其中每个记录由精确且相等数量的空格组成。因此,如果该文件中的字节包含一个0
,然后是一堆空格,然后是Hans Müller
,那么它根本不是csv文件,您应该重命名它。如果该文件包含0,然后是制表符,然后是Hans Müller,很好,这是一个CSV文件(用于分隔的字符是制表符)
考虑到1988和Köln之间有9个空格,您要么配置了一个非常奇特的制表位,要么它是一个固定长度的记录文件,而不是CSV(也不是excel文件),要么在粘贴它时有一些自由
在开始编写代码读取文件之前,您需要弄清楚文件的实际格式。
注意:这个答案的其余部分假设它毕竟是由制表符分隔的值。如果结果是定长记录,请停止阅读此处
CSV文件的一个问题是没有规范。一些CSV文件允许记录中有换行符(或制表符),例如使用引号和一些引号转义机制。其他人则不然
粘贴不包含任何“有趣”的数据(其中数据本身包含制表符或换行符)。因此,很难说
让我们假设(这里我将以“Aufgabe”作为提示)它是家庭作业,课程材料希望消除CSV的复杂性,您只需假设输入数据永远不会包含选项卡或换行符
然后,你的问题归结为一个非常简单的问题:这个文件中有多少行
但是,输入到代码> CONTCSVDATAOCVS.NUM < /CUT>(顺便说一下,这不是标准java),我们不这样命名方法,如果你有能力重新考虑课程材料或教育场地,你可能会考虑它,这不是第一步java课程的好开始。是一个“字符串数组列表”,这很奇怪。大概的意思是,它是每个“字符串”的列表,所以它只是<代码>返回列表.size()代码>。我建议您学习如何编写java,并学习如何调试。例如,编写一些代码,在给定一些示例输入的情况下,打印出
列表csvData
实际包含的内容。在理解您应该做什么以及您的输入实际上是什么之前,您无法真正正确地编写代码。由于每行代表一个条目,您只需返回列表的大小,即return csvData.size()代码>您正在使用吗?也许您可以浏览这个问题,并从文件data.csv
中再发布几行?或者甚至可以发布一个指向实际文件的链接?
public static int countCsvData_CSV_NUM(List<String[]> csvData)