非终止Java程序2

时间:2011-11-09 15:22:11

标签: java eclipse java.util.scanner

我遇到与此link中发布的问题相同的问题。 我不是为什么,但是当我再次尝试时,但这次使用Eclipse(我在链接中使用了Netbeans)。我得到的结果严重错误。在UVAToolkit中,误导性的空格可能会给出错误的答案。

如果有机会,我应该使用BufferedReader吗?

BufferedReader reader = new BufferedReader(InputStreamReader(System.in));

代码[注意:位于main(String [] args)方法]

Scanner scanner = new Scanner(System.in);
String line;
while(!(line = scanner.nextLine()).equals("")) {
     System.out.println(line);
}
System.out.println("done");

案例输入:[“1000”字符串末尾没有空白区域]

1 10
1 100
1 1000

案例输出[注:“新行”属于空格输入]

1 10
1 100
"new-line"
1 1000
"new-line"
done
"new-line"

正确的案例输出[注意:“完成”字符串末尾没有空白区域

1 10
1 100
1 1000
done

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下代码将显示输入的结果字符串(如果它不是空字符串)并在完成后显示“完成”。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ReadConsoleScanner {
    public static void main(String[] args) {
        boolean stop = false;
        BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
        String sWhatever = "";
        try {
            while(!(stop = (sWhatever = bufferRead.readLine()).matches(""))){
                if (!stop) System.out.println(sWhatever);
            }
            System.out.println("done");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

关于您的期望如下:

  

案例输入:[“1000”字符串末尾没有空白区域]

我认为很难找到一种方法来避免空白(空字符串)作为循环的哨兵所需,除非最终输入预期为“1 1000”,我们可以在其中更改哨兵循环如下:

while(!(stop = (sWhatever = bufferRead.readLine()).contains("1 1000"))){
    //whatever
}