由于某种原因,我无法让这个工作。我有一个应用程序可以读取交易,当输入空行时需要打印出一些东西。
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;}
答案 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循环不会执行。