读取文件时,如何将一行保存到linkedlist中,下一行保存到另一个列表中?



我想从文件中读取并将每行存储到单独的LinkedList中,但我不知道如何做到这一点,因为我正在使用split函数。

文本是这样的:

124,53,7,2
1,2,34,567,23

将第一行存储到LinkedList中,将第二行存储到另一个LinkedList中。

ex:num1保存124,53,7,2个节点
Num2包含1、2、34、567、23个节点

if(args.length == 0)
    System.out.println("No file specified.");
else{
    FileReader theFile;
    BufferedReader inFile;
    String oneLine;
    int s;
    try{
        theFile = new FileReader(args[0]);
        inFile = new BufferedReader(theFile);
        LargeNumber num1 = new LargeNumber();
        LargeNumber num2 = new LargeNumber();
        while((oneLine = inFile.readLine()) != null){
            String numbers[] = oneLine.split(",");
            s = 0;
            for(int i = 0; i < numbers.length; i++){
                num1.push(Integer.parseInt(numbers[i]));
            }
            if((inFile.readLine()).length()==0){
                continue;
            }
        }
    }
    catch(Exception e){
        System.out.println(e);
    }
}

如果我理解正确的话,你似乎想成对地排列你的列表。这是最简单的方法,但不一定是最好的:

List<LargeNumber> firstList = new ArrayList<>();
List<LargeNumber> secondList = new ArrayList<>();
try{
    theFile = new FileReader(args[0]);
    inFile = new BufferedReader(theFile);
    while(inFile.ready()){
        String firstLine = getNonEmptyLine(inFile);
        if(firstLine.isEmpty()) break;
        String secondLine = getNonEmptyLine(inFile);
        if(secondLine.isEmpty()) break;
        firstList.add(makeLargeNumber(firstLine));
        secondList.add(makeLargeNumber(secondLine));
    }
}
catch(Exception e){
    System.out.println(e);
}

readNonEmptyLine()方法:

private String readNonEmptyLine(BufferedReader reader) {
     while(reader.ready()) {
          String nextLine = reader.readLine();
          if(!nextLine.isEmpty()) return nextLine;
     }
     return "";
}

这里是makeLargeNumber方法:

private LargeNumber makeLargeNumber(String line) {
    LargeNumber num1 = new LargeNumber();
    String numbers[] = oneLine.split(",");
    s = 0;
    for(int i = 0; i < numbers.length; i++){
        num1.push(Integer.parseInt(numbers[i]));
    }
    return num1;
}

这将工作,但最好有一个这样的类:

class NumberPair {
    LargeNumber firstNumber;
    LargeNumber secondNumber;
}

然后只有一个List而不是两个。我想你可以弄清楚如何修改上面的代码来使用NumberPair类。

您可以使用List<LargeNumber>来代替num1、num2、num3等。

所以它看起来像这样:

List<LargeNumber> myNumbers = new ArrayList();
try ( ... ) {
    String line;
    while((line = ...readLine()) != null) {
        LargeNumber number = new LargeNumber();
        for(part : line.split(...)){
            number.push(Integer.parseInt(part));
        }
        myNumbers.add(number);
    }
}

如果您只想要n个数字(例如n=2, num1和num2),并且希望在两者之间交替使用,请使用数组。

LargeNumber[] myNumbers = new LargeNumber[n];
for(int i = 0; i < myNumbers.length; i++) myNumbers[i] = new LargeNumber();
try ( ... ) {
    String line;
    int i = 0;
    while((line = ...readLine()) != null) {
        LargeNumber number = myNumbers[i%myNumbers.length];
        for(part : line.split(...)){
            number.push(Integer.parseInt(part));
        }
        i++;
    }
}

别忘了关闭你的阅读器!(只需使用try-with- resources:))

如果您已经知道行数,您可以创建一个列表数组,其中数组的大小是行数。然后,您将使用行号来确定要使用的列表。

如果你不知道有多少行,创建一个列表的列表。

我的例子假设你不知道有多少行。

List<LinkedList<Integer>> lists = new ArrayList<LinkedList<Integer>>();
//BufferedReader stuff...
int lineNum = 0;
while ((line = reader.readLine()) != null)
{
    try
    {
        LinkedList<Integer> numbers = new LinkedList();
        String[] components = line.split(",");
        for (String s : components)
        {
            numbers.add(Integer.parseInt(s));
        }
        lineNum++;
        lists.add(numbers);
    } catch(Exception e)
    {
        System.err.println("An error has occured: " + e.getMessage());
    }
}

可以将类对象存储到任何合适的集合中。如

 List<LargeNumber> list=new ArrayList<LargeNumber>;

添加对象:

list.add(num);

你可以使用for-each循环来获取这些值:

for(LargeNumber l:list)
  l.method()//...

相关内容

  • 没有找到相关文章

最新更新