hasNextLine()基本上什么也没做

时间:2015-11-11 14:55:50

标签: java

我想编写一个代码来逐字符地反转一行中的每个单词,如下所示:

Input = Life is good 
Output = efiL si doog

我能够通过使用2个扫描仪来实现这一点(这非常有效):

      Scanner scan = new Scanner(text); //this was used in the code before, so i am emptying the memory
      String result = "";
      scan.nextLine();
      String text = scan.nextLine();
      Scanner scan2 = new Scanner(text);
      while(scan2.hasNext()) 
      {
        String text2 = scan2.next(); 
        result = result + " " + reverse(text2); 
      }      
      System.out.println("Reverse version : " + result); 

但是当我试图通过一台扫描仪实现这一目标时,发生了一些令人分心的事情:

          Scanner scan2 = new Scanner(System.in); 
          String result = "";
          scan2.nextLine();
          String text = scan2.nextLine();
          while(scan2.hasNext()) 
          {
            text = scan2.next(); 
            result = result + " " + reverse(text); 
          }      
          System.out.println("Reverse version : " + result); 

实际上,主要问题是:将此代码更改为scan2.hasNext()!scan2.hasNext()根本不会输出任何可见结果。 'while'仍在两种情况下都会启动并进入无限循环。在循环之前没有对文本进行任何输入也会启动它。我知道我可以通过Ctrl + D退出,但你可以看到我不想这样做。

第二个代码可能有错误,因为它经常改变,但主要问题仍然存在。

一个初学者在这里,所以每一个解释都会有所帮助。 先感谢您!

2 个答案:

答案 0 :(得分:2)

您正在阅读System.inSystem.in是用户输入文本的位置,只有按Enter键才能读取文本。

扫描仪无法知道您是否继续输入文字。所以只有当它知道有下一个令牌(因为你输入了某个东西并按下Enter键),或者当它知道没有下一个令牌时(因为你通过键入Ctrl-D关闭了流),它才能返回)。所以,如果你没有输入任何东西,它会阻塞,等待你的输入。

目前还不清楚你想要达到的目标。扫描程序停止阻止的唯一方法是按Ctrl-D关闭流,或者输入特定的单词,检查代码中的单词,如果输入了单词,则跳出循环。

我也不明白你为什么要读两行并在进入循环之前忽略它们。

答案 1 :(得分:-2)

import java.util.Scanner;

public class Reverse {
    public static void main (String[] args) {
        Scanner scan = new Scanner(System.in);
        String result;
        String text;

        while (true) {
            text = scan.nextLine();
            result = new StringBuffer(text).reverse().toString();
            System.out.println("Reverse version : " + result);
        }
    }
}