java - 从控制台读取字符、字节和字符串

标签 java java.util.scanner

我希望至少有一个好人愿意帮助我 - 这个话题会让我很沮丧。

我在从控制台读取特定组成的数据时遇到问题,这意味着:在第一行中,我有三个由空格分隔的符号 - 2 个数字和 1 个字符。第二行有一行字符串。示例:

1 2 E

WUNDDLOOD

5 7 S

LRRMSDDD

我需要将它们作为字节类型(前两位数字)、字符类型(第一行的最后一个符号)和字符串类型(整个第二行)。

我尝试使用扫描仪,但无法从中读取字符。不过我尝试使用“charAt()”但是......可能我对此感到厌倦了。

我的代码摘录:

while (stdin.hasNextLine()) {
    Scanner stdin = new Scanner(System.in);
    byte x = stdin.nextByte();
    byte y = stdin.nextByte();
    char h = stdin.next().charAt(0);
    String str = stdin.nextLine();
}

我得到了InputMismatchException并且最后一个字符串甚至没有被读取。你能帮我吗?

最佳答案

关闭,但您需要清除 .next() 之后的行。如果不这样做,您的循环会读取直到行尾,然后返回到循环顶部它需要一个字节的地方。您给它一个字符串,因此抛出一个InputMismatchException

Scanner stdin = new Scanner(System.in);

do {
    byte x = stdin.nextByte();
    byte y = stdin.nextByte();
    char h = stdin.next().charAt(0);
    stdin.nextLine(); // read EOL
    String str = stdin.nextLine();

    System.out.printf("Output: [%s, %s, %s], %s\n", x, y, h, str);
} while (stdin.hasNextLine());

运行

1 2 E
WHUNDDLOOD
Output: [1, 2, E], WHUNDDLOOD
5 7 S
LRRMSDDD
Output: [5, 7, S], LRRMSDDD

关于java - 从控制台读取字符、字节和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349855/

相关文章:

Java Scanner 无论如何都会被清除,如何防止这种情况发生?

java - 将输入从扫描仪传递到方法

java - 如何从包含二维数组的 .txt 文件中读取整数,我收到 java.util.InputMismatchException

java - 我可以在 JFrame 中嵌入 JavaFX 应用程序类吗?

java - Log4j 的rollingPolicy.FileNamePattern 也在更改压缩文件的名称

java - Android 蓝牙聊天应用程序(设备立即失去连接)

java - 在套接字上设置超时时出现 NoSuchElementException

java - android当url音频流时,音乐没有停止

java.lang.NullPointerException : Location is required

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?