String si = "asd";
Scanner sc = new Scanner(si);
byte d = sc.nextByte();
在有关Scanner(String string)构造函数的文档中: 构造一个新的Scanner,它生成从指定字符串扫描的值。
此代码使用InputMismatchException进行压缩。我做错了什么?
答案 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。 您正在尝试从不包含任何数字的字符串中读取一个字节。