Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算csv文件中的总人数?_Java_Csv - Fatal编程技术网

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)