从扫描器中获取一个字符输入

我试图找到一种方法,从键盘上获取一个 "字符 "输入。

我试着用。

Scanner reader = new Scanner(System.in);
char c = reader.nextChar();

这个方法不存在。

我试着把c'作为一个字符串'。然而,这并不总是在任何情况下都有效,因为我从我的方法中调用的其他方法需要一个`字符'作为输入。因此,我必须找到一种方法,明确地将char作为输入。

有什么帮助吗?

解决办法

你可以从Scanner.next中获取第一个字符。

char c = reader.next().charAt(0);

要消耗_完全_一个字符,你可以使用。

char c = reader.findInLine(".").charAt(0);

如果要消耗_严格意义上的一个字符,您可以使用。

char c = reader.next(".").charAt(0);
评论(12)

没有API方法可以从扫描器中获得一个字符。你应该使用scanner.next()获得字符串,并对返回的字符串调用String.charAt(0)方法。

Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);

为了安全起见,你也可以先对字符串调用trim(),以删除任何空白。

Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
评论(0)

有三种方法来处理这个问题。

  • 在扫描器上调用next(),并提取字符串的第一个字符(例如charAt(0))如果你想把这一行的其余部分读成字符,就在字符串的其余字符上进行迭代。 其他答案有这样的代码。

  • 使用setDelimiter("")来设置分隔符为空字符串。 这将导致next()被标记为正好是一个字符的字符串。 所以你可以重复地调用next().charAt(0)来迭代这些字符。 然后你可以将分隔符设置为原来的值,并继续以正常的方式进行扫描!

  • 使用阅读器API而不是扫描器API。 读取器.read()`方法提供了一个从输入流中读取的单个字符。 比如说。

    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) { // 检查 EOF
        // 我们有一个字符 ...
    }

当你通过 "System.in "从控制台读取时,输入通常由操作系统缓冲,只有在用户输入ENTER时才会释放给应用程序。 因此,如果你想让你的应用程序对单个键盘敲击做出反应,这是不可行的。 你需要做一些特定于操作系统的本地代码,在操作系统层面上关闭或解决控制台的行缓冲问题。

参考。

评论(1)