为了账号安全,请及时绑定邮箱和手机立即绑定

scanner读取中文后异常

scanner读取中文好像有问题?先输入了“小夏”,到了输年龄的时候输了“20”,结果控制台告诉我输入的是"xiaoxxiaoxiaxix20",报了数字类型异常,如果输英文的话没有问题,这是怎么回事?

http://img1.sycdn.imooc.com//576116040001544213660768.jpg

正在回答

2 回答

重新启动运行一下应该就好了,可能跟缓冲有关,键盘输入有时会这样

不行的话给代码瞧瞧

0 回复 有任何疑惑可以回复我~
#1

大可无谐号 提问者

重启了还是一样,换了编码方式试了也还是不行
2016-06-15 回复 有任何疑惑可以回复我~
#2

大可无谐号 提问者

非常感谢!
2016-06-16 回复 有任何疑惑可以回复我~
package com.imooc;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

//import com.imooc.action.GoddessAction;
//import com.imooc.model.Goddess;

public class View_test {

private static final String CONTEXT = "欢迎来到女神禁区: \n" + "下面是女神禁区的功能列表: \n"
+ "[MAIN/M]:主菜单 \n" + "[QUERY/Q]:查看全部女神的信息 \n"
+ "[GET/G]:查看某位女神的详细信息 \n" + "[ADD/A]:添加女神信息 \n"
+ "[UPDATE/U]:更新女神信息 \n" + "[DELETE/D]:删除女神信息 \n"
+ "[SERCH/S]:查询女神信息(根据姓名、手机号来查询) \n" + "[EXIT/E]:退出女神禁区 \n"
+ "[BREAK/B]:退出当前功能,返回主菜单";

private static final String OPERATION_MAIN = "MAIN";
private static final String OPERATION_QUERY = "QUERY";
private static final String OPERATION_GET = "GET";
private static final String OPERATION_ADD = "ADD";
private static final String OPERATION_UPDATE = "UPDATE";
private static final String OPERATION_DELETE = "DELETE";
private static final String OPERATION_SEARCH = "SEARCH";
private static final String OPERATION_EXIT = "EXIT";
private static final String OPERATION_BREAK = "BREAK";

public static void main(String[] args) {

System.out.println(CONTEXT);

Scanner scan = new Scanner(System.in);
// Goddess goddess = new Goddess();
// GoddessAction action = new GoddessAction();
String previous = null;
Integer step = 1;
// 怎么保持程序一直运行
while (scan.hasNext()) {
String in = scan.next().toString();
if (OPERATION_EXIT.equals(in.toUpperCase())
|| OPERATION_EXIT.substring(0, 1).equals(in.toUpperCase())) {
System.out.println("您已成功退出女神禁区!");
break;
}else if (OPERATION_ADD.equals(in.toUpperCase())
|| OPERATION_ADD.substring(0, 1).equals(in.toUpperCase())
|| OPERATION_ADD.equals(previous)) {
previous = OPERATION_ADD;
//新增女神
if(1 == step) {
System.out.println("请输入女神的[姓名]:");
}else if(2 == step) {
System.out.println("您输入的值为:" + in);
// goddess.setUser_name(in);
System.out.println("请输入女神的[年龄]:");
}else if(3 == step) {
System.out.println("您输入的值为:" + in);
// goddess.setAge(Integer.valueOf(in));
System.out.println("请输入女神的[生日],格式如yyyy-MM-dd");
}else if(4 == step) {
System.out.println("您输入的值为:" + in);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birthday = null;
try {
birthday = sdf.parse(in);
// goddess.setBirthday(birthday);
System.out.println("请输入女神的[邮箱]");
} catch (ParseException e) {
e.printStackTrace();
System.out.println("您输入的格式有误,请重新输入:");
step = 3;
}
}else if(5 == step) {
// goddess.setEmail(in);
System.out.println("请输入女神的[手机号]");
}else if(6 == step) {
// goddess.setMobile(in);

try {
// action.add(goddess);
System.out.println("新增女神成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("新增女神失败!");
}
}
if(OPERATION_ADD.equals(previous)) {
step++;
}
}else {
System.out.println("您输入的值为:" + in);
}



}

}

}


1 回复 有任何疑惑可以回复我~
#1

3114002661

我测试了一下,只要每次将光标移到最后一行再输入就没有问题,控制台的很多时候会这样
2016-06-15 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JDBC之 “ 对岸的女孩看过来”
  • 参与学习       99324    人
  • 解答问题       856    个

一起领略JDBC的奥秘,为进一步学习集成框架打下良好的基础

进入课程

scanner读取中文后异常

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信