Java 文本文件中的链接列表(打印时出现问题)

Java 文本文件中的链接列表(打印时出现问题),java,linked-list,Java,Linked List,我需要从如下所示的文本文件创建一个链接列表: john, peter, maria, dan, george, sonja fred, steve ann, tom, maria //etc... 我想打印每行的第一个名字(引线)和该行的其余名字(与该名字关联) 例如: Leader: John Friends: peter, maria, dan, george, sonja Friend Count: 5 Leader: Fred Friends: steve Friend Count:

我需要从如下所示的文本文件创建一个链接列表:

john, peter, maria, dan, george, sonja
fred, steve
ann, tom, maria
//etc...
我想打印每行的第一个名字(引线)和该行的其余名字(与该名字关联)

例如:

Leader: John Friends: peter, maria, dan, george, sonja Friend Count: 5
Leader: Fred Friends: steve Friend Count: 1
//etc...
这就是我到目前为止所做的:

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

import javax.swing.JFileChooser;
public class Test {

public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<String>();

    LinkData ld1 = new LinkData();
    JFileChooser chooser = new JFileChooser(".");
    int returnVal = chooser.showOpenDialog(null);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        System.out.println("You chose to open this file: "
                + chooser.getSelectedFile().getName()
                + "Print some info"

        // open and read file:
        Scanner scanner = null;
        try {
            scanner = new Scanner(chooser.getSelectedFile());
        } catch (IOException e) {
            System.err.println(e);
            error();
        } 

        if (scanner == null)
            error();


        while (scanner.hasNextLine()) {

            String line = scanner.nextLine();
            Scanner lineScan = new Scanner(line);
            lineScan.useDelimiter(", ");
            // System.err.println("The line that was scanned: " + line);

            String leader = lineScan.next();

            while (lineScan.hasNext()) {
                list.add(lineScan.next());
            }
            System.out.println("Leaders include_" + leader + list.toString());
        }  
    }
        }

private static void error() {
    System.err.println("An error has occurred: bad data");
    System.exit(0);
}
}
import java.util.*;
导入java.io.*;
导入javax.swing.JFileChooser;
公开课考试{
公共静态void main(字符串[]args){
LinkedList=新建LinkedList();
LinkData ld1=新的LinkData();
JFileChooser chooser=新的JFileChooser(“.”);
int returnVal=chooser.showOpenDialog(null);
if(returnVal==JFileChooser.APPROVE_选项){
System.out.println(“您选择打开此文件:”
+chooser.getSelectedFile().getName()
+“打印一些信息”
//打开并读取文件:
扫描器=空;
试一试{
scanner=新扫描仪(chooser.getSelectedFile());
}捕获(IOE异常){
系统错误println(e);
错误();
} 
如果(扫描器==null)
错误();
while(scanner.hasNextLine()){
字符串行=scanner.nextLine();
扫描仪行扫描=新扫描仪(行);
lineScan.useDelimiter(“,”);
//System.err.println(“扫描的行:“+行”);
字符串引线=lineScan.next();
while(lineScan.hasNext()){
list.add(lineScan.next());
}
System.out.println(“Leaders include”+leader+list.toString());
}  
}
}
私有静态无效错误(){
System.err.println(“发生错误:数据错误”);
系统出口(0);
}
}
现在,第一个名字打印得很好,但是链接列表不断增长,因此结果不会按我想要的方式打印…

您应该在两行之间读取列表

while (scanner.hasNextLine()) {
  list.clear();
  //...
}

您走的是正确的道路。您正在将每一行处理为一个
领导者
和一个
朋友列表
。您将希望跟踪另一个对象中的每一个实体-我建议使用一个地图。类似于:

Map<String, List<String>> leaderMap = new HashMap<String, List<String>>();

// ...
String leader = lineScan.next();

while (lineScan.hasNext()) {
    list.add(lineScan.next());
}

leaderMap.put(leader, list);
Map leaderMap=newhashmap();
// ...
字符串引线=lineScan.next();
while(lineScan.hasNext()){
list.add(lineScan.next());
}
领导映射放置(领导,列表);

不要忘记为从文件中读取的每一行重新初始化列表。最后,您可以迭代映射,打印键(
leader
),以及关联列表的大小(
好友数
).祝你好运!

你的第二行不是应该是
吗队长:弗雷德·弗里德:史蒂夫·弗里德·库恩:1
?是的,刚刚换了。谢谢你抓住了它!这正是我需要的!我在while循环之外清除了它-&它工作得很好!@tommy1370:非常欢迎你,祝你的作业顺利