指定字符串的扫描程序不起作用

时间:2014-06-08 10:17:34

标签: java java.util.scanner

            String si = "asd";
            Scanner sc = new Scanner(si);
            byte d = sc.nextByte();

在有关Scanner(String string)构造函数的文档中: 构造一个新的Scanner,它生成从指定字符串扫描的值。

此代码使用InputMismatchException进行压缩。我做错了什么?

3 个答案:

答案 0 :(得分:3)

Scanner.nextByte()读取字符串中的下一个可用字节。 byte是一个数值,正如您所看到的,您的字符串只包含字符。

事实上,如果你尝试:

String si = "-20 asd";
Scanner sc = new Scanner(si);
byte d = sc.nextByte();

它会起作用,因为-20是可接受的byte,在最后一行d之后会保留-20

如果要获取字符串的字节表示,只需执行

byte[] bytes = sc.next().getBytes();

甚至

byte[] bytes = si.getBytes();

答案 1 :(得分:2)

首先,重要的是要知道Java中byte的范围是[-128, 127]

现在,根据Java Docs,nextByte() method(强调我的):

  

抛出:InputMismatchException - 如果下一个标记与 Integer 正则表达式不匹配,或者超出范围

因此,它希望从[-128, 127]读取String范围内的数字。否则,它将抛出该异常。

如何使用它的一个例子是:

String si = "-128";
Scanner sc = new Scanner(si);
byte d = sc.nextByte();
System.out.println(d); // -128

修改:访问String字符的一个简单解决方案是将其转换为数组char[]

char[] chars = si.toCharArray();
System.out.println(chars[index]);

答案 2 :(得分:0)

检查JavaDoc for nextByte method。 您正在尝试从不包含任何数字的字符串中读取一个字节。