不得不承认Scanner类对英文输入支持是非常好的!但是针对中文输入,Scanner的传说中的阻塞问题就出来了!
请看下面的小程序:
import java.util.Scanner;
public class Test {
public static void main(String [] args) {
new Test().start();
}
public void start() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("请输入用户名:");
String name = sc.next();
System.out.println("name = " + name);
System.out.println("继续输入吗?(y/n)");
String sure = sc.next();
if(sure.equals("y")) {
continue;
} else {
sc.close();
return;
}
}
}
}
请复制运行,然后到判断继续输入吗?(y/n)的时候,一定要继续用搜狗输入法,并且不要切换到英文输入模式下就会看到如图所示的情况下,一直卡死。
我想这肯定是next()方法里面的readInput()方法导致的!
可是,这怎么解决呢?如果这样接受输入的话,势必影响用户的心情!
请恕小弟愚昧,实在找不到解决之法,请指教!
这应该和控制台,还有和scanner的next方法有关系!任何输入法都会造成这样的情况!不信你可以试试,刚开始时输入用户名时,把光标放在“请输入用户名:”的开头,输入汉字看看,你会发现得到的"NAME="是和你输入的不匹配的!所以建议使用Scanner.nextLine().这种方式是不会错的!猜测next不能获取整个一行!
在Scanner中要输入字符串的话是要用Scanner.nextline()方法的,表示接受字符串