dengndme 2013-04-11 21:41
浏览 337
已采纳

令人蛋疼的Scanner类

不得不承认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()方法导致的!
可是,这怎么解决呢?如果这样接受输入的话,势必影响用户的心情!

请恕小弟愚昧,实在找不到解决之法,请指教!

  • 写回答

2条回答 默认 最新

  • kxys422834 2013-04-12 01:31
    关注

    这应该和控制台,还有和scanner的next方法有关系!任何输入法都会造成这样的情况!不信你可以试试,刚开始时输入用户名时,把光标放在“请输入用户名:”的开头,输入汉字看看,你会发现得到的"NAME="是和你输入的不匹配的!所以建议使用Scanner.nextLine().这种方式是不会错的!猜测next不能获取整个一行!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法