Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Database_Csv_Linked List - Fatal编程技术网

Java:将CSV读取到链表(带有扭曲)

Java:将CSV读取到链表(带有扭曲),java,database,csv,linked-list,Java,Database,Csv,Linked List,我是一个编程新手,自己也在学习Java 这本书提到了几行关于在Java中读取csv文件并将其内容存储到数据结构中的内容 因此,在浏览互联网时,我遇到了以下问题: 有一所学校有以下人员:教员、教职员和学生 教员具有以下属性:姓名、电话号码、电子邮件ID地址、系、研究论文数量 学生具有以下属性:姓名、电话号码、电子邮件ID、地址、卷号、GPA 员工具有以下属性:姓名、电话号码、电子邮件ID、地址、部门、工资 现在,所有这些数据都以以下方式存储在单个csv文件中: 现在,我需要用Jav

我是一个编程新手,自己也在学习Java

这本书提到了几行关于在Java中读取
csv
文件并将其内容存储到
数据结构中的内容

因此,在浏览互联网时,我遇到了以下问题:

  • 有一所学校有以下人员:教员、教职员和学生

  • 教员具有以下属性:姓名、电话号码、电子邮件ID地址、系、研究论文数量

  • 学生具有以下属性:姓名、电话号码、电子邮件ID、地址、卷号、GPA

  • 员工具有以下属性:姓名、电话号码、电子邮件ID、地址、部门、工资

  • 现在,所有这些数据都以以下方式存储在单个
    csv
    文件中:

  • 现在,我需要用Java从cs文件中读取数据,并按如下顺序将其存储到一个链表中:教员记录,职员记录,学生记录
我的代码:

到目前为止,我编写的代码是:

import java.io.*;
import java.util.*;

public class readCSV {
  public static void main(String[] args) throws FileNotFoundException
  {
   
    Scanner scanner = new Scanner(new File("CSV.csv"));
    scanner.useDelimiter(",");
     
    
    while (scanner.hasNext())
    {
        // Read the tokens and store them into a Linked List 
    }
     
    
    scanner.close();
  }
}
我的问题:

有人能帮我吗?我不想使用任何库来解析csv,还想从头开始创建自己的链表——这将是一个很好的实践

我的主要问题是从csv中读取数据并将其存储到链接列表中。一个说明性的代码片段将大有帮助


免责声明:这不是家庭作业问题。我正在自学Java

对于链表,我建议读一本Robert Sedgewick的算法书。(如果a)你懂一些Java,b)你知道链表是如何工作的,那么实现链表本身就不会太难了。)我希望网络上也有很多例子

编写了自己的链表实现(用于学习):扔掉它,不要在实际程序中使用它。认真地现有的库实现将会更好;编写真实世界的馆藏是一项严肃的任务

如果您的数据(文本)可以包含逗号和引号,而这些逗号和引号不是CSV分隔符(在实际数据中通常是这样),则解析CSV比解析声音更复杂

然而,一个简单的实现可能是:

  • 使用
    LineNumberReader
    打开文件
  • 在循环中调用
    readLine()
    ,直到返回null(不再有行)
  • 行拆分读取的每一行。拆分(“,”
  • 处理每行的字段

您可以使用以下内容解析文件:

Scanner scanner = new Scanner(new File("CSV.csv"));
while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    if (line.isEmpty()) {
        continue;
    }
    String[] parts = line.split(",");
    String name = parts[1];
    String number = parts[2];
    String email = parts[3];
    String address = parts[4];
    switch (parts[0]) {
    case "Faculty":
        String department = parts[5];
        String papers = parts[6];
        // add to list
        break;
    case "Student":
        String roll = parts[5];
        String gpa = parts[6];
        // add to list
        break;
    case "Staff":
        String department = parts[5];
        String salary = parts[6];
        // add to list
        break;
    }
}

那么问题是什么呢?如何制作链表?通过创建自己的链表,您的意思是您不想使用java.util.list..?顺便说一句。你发现的问题包括一些糟糕的设计,但在问题的前面。一个合理的实现可能不会通过将教员/学生/员工的(单独的)概念都存储在同一个CSV文件中而将它们混为一谈。首先,根据行的“类型”,输入数据中的“列”表示不同的内容。嗨@Bubletan,我的主要问题是从csv读取数据并将数据存储到链接列表中。一个说明性的代码片段会有很大的帮助…@All,为什么要投反对票?如果需要,我可以增加说明……您还应该问问自己,为什么您想要一个链接列表,而不是其他类型的列表实现。(我不认为链表是我的第一选择,就你正在尝试做的事情而言。)嗨@Paul,我的主要问题是从csv读取数据并将数据存储到链表中。一个说明性的代码片段将大有帮助。。。提前感谢:)
Scanner scanner = new Scanner(new File("CSV.csv"));
while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    if (line.isEmpty()) {
        continue;
    }
    String[] parts = line.split(",");
    String name = parts[1];
    String number = parts[2];
    String email = parts[3];
    String address = parts[4];
    switch (parts[0]) {
    case "Faculty":
        String department = parts[5];
        String papers = parts[6];
        // add to list
        break;
    case "Student":
        String roll = parts[5];
        String gpa = parts[6];
        // add to list
        break;
    case "Staff":
        String department = parts[5];
        String salary = parts[6];
        // add to list
        break;
    }
}