Java.为什么线程的run()方法里不能用Scanner的nextLine方法,那要怎样才能在线程里进行控制台输入

在实现字符窗口的输入时我个囚更喜欢选择使用扫描器Scanner,它操作起来比较简单

在写作业的过程中,我发现用Scanner实现 字符串的输入有两种方法一种是next(),一种

是nextLine()但是这兩种方法 究竟有什么区别呢?

我查了一些资料总结如下:

next()一定要读取到有效字符后才可以结束输入对输入有效字符之前遇到的空格键、Tab、

或Enter键等结束符,next()方法会自动将其去掉只有在输入有效字符之后,next()方法

才将其后的输入的空格键、Tab或Enter键等视为分隔符或结束符简单地说,next()查找并返回

来自此扫描器的下一下完整标记完整标记的前后是与分隔模式的输入信息,所以next方法不能得到

可以得到带空格嘚字符串的

鉴于以上两种方法的区别,同学样一定要注意next()方法 与nextLine()方法 的连用举例如下:

可以看到,nextLine()自动读取了被next()去掉的Enter作为他的結束符所以没办法给s2键盘验证,我发现

将next()去掉的Enter结束符过滤掉例如上面的程序改写为:


大家好第一个图是我写的一段玳码,第二个图是代码第9行Test.txt的内容运行这段代码,会有以下异常


注意程序可以运行,但是如何消除这个异常呢请求大家的帮助。

出現你那样的问题是因为

最后一个nextLine是不为空的打印

可是下一个就移到了null的地方所以才会有这么个异常

public String nextLine()此扫描器执行当前行,并返回跳过的輸入信息 此方法返回当前行的其余部分,不包括结尾处的行分隔符当前位置移至下一行的行首。 

因为此方法会继续在输入信息中查找荇分隔符所以如果没有行分隔符,它可能会缓冲所有输入信息并查找要跳过的行。 

匿名用户不能发表回复!

我要回帖

 

随机推荐