继续做东西直到输入空行

时间:2012-11-27 20:05:01

标签: java string while-loop sentinel

由于某种原因,我无法让这个工作。我有一个应用程序可以读取交易,当输入空行时需要打印出一些东西。

    int transationCount = 0;
    while(sc.hasNext())
    {
        String trans = sc.next();


            String mode = trans.substring(0, 1);
            Double amount = Double.valueOf(trans.substring(1));

            if(mode.equals("C"))
            {
                c.charge(amount);
                ps.println(c.getBalance());
                transationCount = transationCount + 1;
            }
            else if(mode.equals("P"))
            {
                c.pay(amount);
                ps.println(c.getBalance());
                transationCount = transationCount + 1;
            }
    }
    ps.println(c.getBalance());
    ps.println(transationCount);

我试过了

while(sc.hasNext() && !(sc.next().equals("")))

不起作用。我也尝试在while循环中添加

else if (!(trans.equals("")) {break;}

3 个答案:

答案 0 :(得分:2)

默认情况下,扫描程序将忽略空行,因为它不是有效令牌。

您可以手动检查该行是否为空:

public static void main(String[] args) throws Exception {
    Scanner sc = new Scanner(System.in);

    while(true) {
        String line = sc.nextLine();
        if (line.isEmpty()) {
            System.out.println("Empty line entered");
        } else {
            System.out.println("received line: " + line);
            String[] tokens = line.split("\\s+");
            System.out.println("tokens: " + Arrays.toString(tokens));
        }
    }
}

答案 1 :(得分:1)

您的扫描仪使用默认分隔符(空格)来标记输入。 这意味着令牌是单词,无论它们在哪一行。

some

word

只返回两个标记,完全为

some word

你真正需要的是分别获取线条,以便分辨哪条线为空,哪条线包含某些线条。为此,请使用换行作为分隔符:

Scanner.useDelimiter("\\n");

或者您也可以使用BufferedReader,请参阅BufferedReader.readLine()

请注意,同一行中的两个字现在将包含在同一个trans字符串中。您可以使用String.split方法单独获取每个单词。

答案 2 :(得分:0)

那么如果输入空行,我将如何转义while循环?还有另外一种方法吗? - Infodayne

您可以在while loop之上/之上使用标签,并在遇到emptyLine时将其中断

或者您可以使用

Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
 while(! line.isEmpty()){

} 
line.isEmpty()为空时,

line会返回 true ,因此输入while循环的条件将变为 false as现在在while循环中我们有((true))等于(false)因此while循环不会执行。