在Java中读取单个字符

dat*_*ili 24 java

如何从键盘输入char?

Yuv*_*dam 24

您可以扫描整行:

Scanner s = new Scanner(System.in);
String str = s.nextLine();
Run Code Online (Sandbox Code Playgroud)

或者你可以读一个char,因为你知道你正在处理什么编码:

char c = (char) System.in.read();
Run Code Online (Sandbox Code Playgroud)

  • `System.in.read()`可能会阻塞,直到用户键入回车符(至少在Windows上) (8认同)
  • `char c =(char)System.in.read();`(将一个字节从系统编码转换为UTF-16)只有在两个编码中字符具有相同值时才有效.这通常只适用于非常小范围的角色.使用`Scanner`更可靠. (4认同)
  • Linux (Ubuntu) 中 `System.in.read()` 会阻塞,直到用户键入 return (2认同)

小智 15

您可以像这样使用Scanner:

Scanner s= new Scanner(System.in);
char x = s.next().charAt(0);
Run Code Online (Sandbox Code Playgroud)

通过使用charAt函数,您可以在不使用外部强制转换的情况下获取第一个char的值.


小智 8

通常建议使用 nextline 和 System.in.read 要求用户在键入字符后按 Enter 键。然而,寻找这个问题答案的人可能也有兴趣直接响应控制台中的按键!

我找到了一个使用jline3的解决方案,其中我们首先将终端更改为原始模式以直接响应按键,然后等待下一个输入的字符:

var terminal = TerminalBuilder.terminal()
terminal.enterRawMode()
var reader = terminal.reader()

var c = reader.read()
Run Code Online (Sandbox Code Playgroud)
<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline</artifactId>
    <version>3.12.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)