阅读字符串直到空行然后阅读更多

reading strings until blank line then reading more

我正在编写一个程序,该程序使用扫描仪从文件中读取行。当有空行时,我想处理已经看到并存储在 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();

}

我认为这会奏效。

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>();

接近 column/row 计数重置。

结束编辑 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();

}

这里的区别是我们继续,而不是中断,所以我们阅读了其余的行。但是我们只在读取整个文件后才处理。

这是您的问题所在:

if (tempLine.equals("")){
    break;
}        

当您到达 break 时退出循环。创建一个名为 processArraySoFar 的函数并调用它而不是 break。假设 tempArrayArrayList:

if(tempLine.equals("")){
    processArraySoFar(tempArray);
    tempArray = new ArrayList(); //make a fresh ArrayList to use until the next line
}

您遇到的问题是您正在使用 break 跳出循环,而您真正想要的是跳过该行并继续。

所以基本上您所要做的就是删除中断并更改一些代码以使其看起来类似于:

String tempLine = scan.nextLine();
if (!tempLine.equals("")){
    columnCount = tempLine.length();
    tempArray.add(tempLine); //add temp line to string array initial

    rowCount++;
}