我试图找到一种方法,从键盘上获取一个 "字符 "输入。
我试着用。
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
这个方法不存在。
我试着把c'作为一个
字符串'。然而,这并不总是在任何情况下都有效,因为我从我的方法中调用的其他方法需要一个`字符'作为输入。因此,我必须找到一种方法,明确地将char作为输入。
有什么帮助吗?
没有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);
有三种方法来处理这个问题。
在扫描器上调用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时才会释放给应用程序。 因此,如果你想让你的应用程序对单个键盘敲击做出反应,这是不可行的。 你需要做一些特定于操作系统的本地代码,在操作系统层面上关闭或解决控制台的行缓冲问题。
参考。