分隔符使用,为什么Scanner不返回?

Kyl*_*ris 6 java delimiter

我正在从Java C的面向对象编程的介绍中进行练习.Thomas Wu.

第73页提供了请求全名的代码,使用分隔符对其进行标记并将其打印回来.

import java.util.*;

class Scanner1
{
    public static void main(String[] args)
    {
        String name;
        Scanner scanner = new Scanner(System.in);

        scanner.useDelimiter(System.getProperty("line.separator"));
        System.out.print("Enter full name (first, middle, last)");   

        name = scanner.next( );
        System.out.println("you entered " + name + ".");
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我似乎不想打印回来,它冻结了程序,迫使使用任务管理器关闭它.

运行程序

它编译并且没有错误.我已经多次检查拼写错误等.

带分隔符代码的IDE

如果我删除分隔符部分(最后一张图片),它会将第一个令牌放到第一个空格.所以错误位于分隔符代码周围.

没有分隔符代码的IDE

Bog*_*rov 6

似乎您的IDE控制台没有考虑[Enter]行分隔符.尝试代码工作的最佳方法是直接从终端(Windows上的控制台)调用编译的Java文件.当然,首先需要导航到编译的Java文件持久存在的目录(Scanner1.class文件所在的目录).

例如java Scanner1

如果您希望与系统无关,那么最好的方法是编译一个Pattern来定义分隔符,或者只使用内置方法.nextLine()引用Oracle文档

public class Main {
    //These constant fields are from .nextLine() method in the Scanner class
    private static final String LINE_SEPARATOR_PATTERN ="\r\n|[\n\r\u2028\u2029\u0085]";

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        scanner.useDelimiter(Pattern.compile(LINE_SEPARATOR_PATTERN));
        System.out.print("Enter name:");
        String name = scanner.next();
        System.out.println(name);
    }
}
Run Code Online (Sandbox Code Playgroud)