不以分隔符结尾的扫描程序类输入



我得到了所需的输出,但我的代码还没有完成运行。我使用"/"作为扫描仪类的分隔符,我的代码是

Scanner scan = new Scanner(System.in);        
scan.useDelimiter("/");
while(scan.hasNext())
{
  System.out.println(scan.next());
}

我在"输出"窗口中给出的输入是

Input
abcdef/ghijkl/out/
Output:
abcdef
ghijkl
out

并且该程序仍在运行。

import java.util.Scanner; // headers MUST be above the first class
// one class needs to have a main() method
public class HelloWorld
{
 // arguments are passed using the text field below this editor
    public static void main(String[] args)
    {
    Scanner scan = new Scanner("abcdef/ghijkl/out/");        
    scan.useDelimiter("/");
    while(scan.hasNext())
        {
          System.out.println(scan.next());
        }
    }
}

这行得通。

您的问题可能是您正在打开键盘扫描仪 (System.in(,但您没有将键盘输入的值存储在任何位置。你可能希望将输入设置为变量,就像我在教授Java的课程中所做的那样:

Scanner scan = new Scanner (System.in);
String input = scan.nextLine(); // input: "abcdef/ghijkl/out/"
String[] stringArray = input.split("/");
for(String i : stringArray)
{
    System.out.println(i);
}

问题出在next()方法上。以下是 Oracle 网站的摘录,其中指出此方法可能会在等待输入扫描时阻塞,即使之前对 hasNext(( 的调用返回 true

公共字符串 next((

从此扫描程序查找并返回下一个完整令牌。完整的标记前后是与分隔符模式匹配的输入。此方法可能会在等待输入扫描时阻塞,即使之前对 hasNext(( 的调用返回了 true

您必须使用scan.close();关闭扫描

在这里,您将将其用作

Scanner scan = new Scanner(System.in);        
scan.useDelimiter("/");
while(scan.hasNext())
{
  System.out.println(scan.next());
  scan.close();
}

最新更新