scanner读取中文后异常

来源:2-9 JDBC实战---搭建视图层(下)

大可无谐号

2016-06-15 16:50

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

http://img.mukewang.com/576116040001544213660768.jpg

写回答 关注

2回答

  • 3114002661
    2016-06-15 16:59:56
    已采纳

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

    不行的话给代码瞧瞧

    大可无谐号

    非常感谢!

    2016-06-16 14:57:04

    共 2 条回复 >

  • 大可无谐号
    2016-06-15 17:51:28
    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);
    }



    }

    }

    }


    311400...

    我测试了一下,只要每次将光标移到最后一行再输入就没有问题,控制台的很多时候会这样

    2016-06-15 23:15:24

    共 1 条回复 >

JDBC之 “ 对岸的女孩看过来”

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

99333 学习 · 916 问题

查看课程

相似问题