nextLine()在while循环结束时跳过行。丢失数据

时间:2014-03-07 09:38:01

标签: java while-loop text-files java.util.scanner

我试图在每次循环运行结束时只运行nextLine(),这样它每次迭代都会以新行开始循环,但是在最后一次运行结束时,我不希望它运行nextLine()因为它跳过了我程序其余部分所需的数据。我该如何解决这个问题?

        String hasInt = fileIn.nextLine();

        while(Character.isDigit(hasInt.charAt(0)))
            {
                data = hasInt.split(",");
                info = Integer.parseInt(data[0]);
                def = data[1];
                case = data[2];
                free = data[3];

                Case newCase = new Case(info, def, case, free);
                miner.addCase(newCase);
                hasInt = fileIn.nextLine();
            }

将它全部组合到for循环似乎可以工作,这让我一路走过循环,似乎工作,但现在在方法的开头,它陷入无限循环

   while(fileIn.hasNextLine())
      {
        if(fileIn.hasNext("[A-Za-z]+"))
         {

4 个答案:

答案 0 :(得分:1)

    do {
        String hasInt = fileIn.nextLine();
        if (!Character.isDigit(hasInt.charAt(0)) {
           break; 
        }
        // rest of your code here            
    } while(true);

答案 1 :(得分:1)

您可以尝试将语句合并到for循环中:

for(
    String hasInt = fileIn.nextLine();
    Character.isDigit(hasInt.charAt(0));
    hasInt = fileIn.nextLine()
) {
    data = hasInt.split(",");
    info = Integer.parseInt(data[0]);
    def = data[1];
    case = data[2];
    free = data[3];

    Case newCase = new Case(info, def, case, free);
    miner.addCase(newCase);
}

答案 2 :(得分:0)

我不确定它会有多干净但是;看来你可以在while循环后使用hasInt获取你不想跳过的值。

答案 3 :(得分:0)

您好,您不会丢失数据,因为您最后读取的数据是在hasInt变量中。所以在while循环之后使用它。

String hasInt = fileIn.nextLine();

    while(Character.isDigit(hasInt.charAt(0)))
        {
            data = hasInt.split(",");
            info = Integer.parseInt(data[0]);
            def = data[1];
            case = data[2];
            free = data[3];

            Case newCase = new Case(info, def, case, free);
            miner.addCase(newCase);
            hasInt = fileIn.nextLine();
        }
     //use the hasInt variable here to get the last read data...