我想从文件中读取并将每行存储到单独的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()//...