我正在编写一个程序,该程序使用Scanner读取文件中的行。当有一个空行时,我想处理已经看到并存储在String数组列表中的行。然后我希望它跳到文件中的下一行,直到它再次看到一个空行..然后处理这些行,直到文件被完全读取。
我似乎无法绕过这样做?到目前为止,我的程序适用于一组行,直到它到达空白行,但后来没有进展。
在while scan.hasnextLine()
循环结束后,我可以在我的代码中看到我想要做的处理。
感谢您的帮助。
public static void main(String[]argv){
Scanner scan = new Scanner(System.in);
//read in the line from stdin, if it's empty, then break out OR process it
while (scan.hasNextLine()){
String tempLine = scan.nextLine();
if (tempLine.equals("")){
break;
}
columnCount = tempLine.length();
tempArray.add(tempLine); //add temp line to string array initial
rowCount++;
}
System.out.println("rowcount: "+rowCount);
System.out.println("columnCount: "+columnCount);
//set the 2D array to the right size
epidemicArray = new char[rowCount][columnCount];
//populate 2d array with strings from tempArray
updateArray();
System.out.println("original array:");
printArray();
//copy populated 2d array to another array
copyArray(epidemicArrayCopy);
//iterate over array to get final state
do{
getFinalState(epidemicArray);
} while (countChanges > 0);
printArray();
}
答案 0 :(得分:1)
我认为这会奏效。
public static void main(String[]argv){
Scanner scan = new Scanner(System.in);
//read in the line from stdin, if it's empty, then break out OR process it
while (readSome(scan)){}
}
public void readSome(Scanner scan) {
while (true){
if (!scan.hasNextLine()) {
return false;
}
String tempLine = scan.nextLine();
if (tempLine.equals("")){
break;
}
columnCount = tempLine.length();
tempArray.add(tempLine); //add temp line to string array initial
rowCount++;
}
System.out.println("rowcount: "+rowCount);
System.out.println("columnCount: "+columnCount);
//set the 2D array to the right size
epidemicArray = new char[rowCount][columnCount];
//populate 2d array with strings from tempArray
updateArray();
System.out.println("original array:");
printArray();
//copy populated 2d array to another array
copyArray(epidemicArrayCopy);
//iterate over array to get final state
do{
getFinalState(epidemicArray);
} while (countChanges > 0);
printArray();
return true;
}
这里我们对每个块读取进行处理。
修改强> 我怀疑你需要添加:
columnCount = 0;
rowCount = 0;
到readSome方法的开头。
<强>最终修改
修改2
你可能也需要这个:
tempArray = new ArrayList<String>();
在列/行计数附近重置。
结束编辑2
或许你想要:
public static void main(String[]argv){
Scanner scan = new Scanner(System.in);
//read in the line from stdin, if it's empty, then break out OR process it
while (scan.hasNextLine()){
String tempLine = scan.nextLine();
if (tempLine.equals("")){
continue;
}
columnCount = tempLine.length();
tempArray.add(tempLine); //add temp line to string array initial
rowCount++;
}
System.out.println("rowcount: "+rowCount);
System.out.println("columnCount: "+columnCount);
//set the 2D array to the right size
epidemicArray = new char[rowCount][columnCount];
//populate 2d array with strings from tempArray
updateArray();
System.out.println("original array:");
printArray();
//copy populated 2d array to another array
copyArray(epidemicArrayCopy);
//iterate over array to get final state
do{
getFinalState(epidemicArray);
} while (countChanges > 0);
printArray();
}
这里的区别在于我们继续,而不是打破,所以我们阅读其余的部分。但是我们只在阅读完整个文件后进行处理。
答案 1 :(得分:1)
以下是您的问题发生的地方:
if (tempLine.equals("")){
break;
}
当你到达break
时,你退出循环。创建一个名为processArraySoFar
的函数,然后调用该函数而不是break
。假设tempArray
是ArrayList
:
if(tempLine.equals("")){
processArraySoFar(tempArray);
tempArray = new ArrayList(); //make a fresh ArrayList to use until the next line
}
答案 2 :(得分:1)
你遇到的问题是你正在使用break
摆脱循环而你真正想要的是跳过这一行并继续。
所以你基本上所要做的就是删除中断并改变你的代码以使其类似于:
String tempLine = scan.nextLine();
if (!tempLine.equals("")){
columnCount = tempLine.length();
tempArray.add(tempLine); //add temp line to string array initial
rowCount++;
}