按照4楼说法,那我输入1和1f,都只接受1了,是不?
但是我当我输入1f的时候,输出是 1 2 3 4。这到底是为什么?
错了,不是只接收第一个,而是接收全部的。
----------------解决方案--------------------------------------------------------
System.in.read()返回int,
输入时只接收一个char,如输入123 只接收1,输入abc只接收a.这句是不对的,如下句,是先转化成Unicode码表示!!!
System.in.read()方法把接收到的数据都用Unicode码表示
System.in.read接收的是字节0-255 (接收一个8进制的数),
第一个输出很简单,是输入一个数.
说一下第二个:
0000是一个8进制的数,
当你输入0000时就读了3次,再加上子循环1次,就是输出结果0 1 2 3了.
你也是错的,别忘了换行符。输入1,如果按字符输出是‘1’,‘\r’,‘\n’,所以是3次啦。所以你可以推出1f,1ff是多少次啦。
----------------解决方案--------------------------------------------------------
第一个问题:
这个主要取决于Scanner.next()的设计,
Returns the next token if it matches the pattern constructed from the specified string.
If the match is successful, the scanner advances past the input that matched the pattern.
而在Java的类Scanner源代码中表明了它的hasNext()是如何判断是否还有下一个元素的。使用下面的正则表达式
分割输入:
private static Pattern WHITESPACE_PATTERN = Pattern.compile("\\p{javaWhitespace}+");
第二个问题:
这是InputStream的一个实现中的代码:
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
可以看出实际它就取得一个字节的数据。
----------------解决方案--------------------------------------------------------
回复 7楼 pigpigpigxk
提示: 作者被禁止或删除 内容自动屏蔽