使用Java Scanner获取单个字符

3
在Java的Scanner类中,为什么没有nextChar()语法,是否有一种命令可以在不使用String变量的情况下执行类似的操作?
4个回答

5

两种解决方案:

  • 使用toCharArray():这将返回一个char[],您可以在其中使用foreach循环;
  • 使用字符串长度与.charAt()相结合。

谢谢,这给了我一个很好的想法,我忘记了我可以使用.charAt()从整个字符串中获取任何字母。 - undefined

2

Java的Scanner类操作令牌,即完整的输出单元。通常这是完整的单词、文本行、数字(整数、双精度浮点数、浮点数等)。如果您想读取单个字符,应该在类似于此的结构中使用BufferedReader。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.in替换为您正在使用的Scanner输入。然后使用char c = (char)in.read()从输入中读取下一个字符。


我需要使用不同的Java util吗?还是只需要使用import java.util.Scanner;就可以了? - undefined
1
你需要额外导入一些内容。最简单的方法是添加import java.io.* - undefined

2
如果您想要字符级别的访问权限,可以进一步降低一个级别,直接使用InputStream接口:
public class Test
{
    public static void main(String[] args) throws Exception
    {
        while (true)
        {
            char c = (char)System.in.read();
            System.out.println("[" + c + "]");
        }
    }
}

这并不总是这样,对吧?如果我将一个多字节的UTF-8字符发送到System.in,read调用将能正确解析它吗?因为read只返回一个字节,所以这就是为什么更倾向于使用BufferedReader。 - undefined
这个代码是可行的,虽然在命令行运行时会在每个字符之间的3行中放置交替的括号。 - undefined

1
Scanner s = new Scanner(System.in);
s.next(“.{1,}”);

因此,您可以使用Scanner#next()方法,并将仅消耗一个字符的正则表达式作为参数传递。
您可以使用上面的示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接