从键盘获取字符串中的 java.util.InputMismatchException

标签 java exception

代码

package info.code;

import java.util.Scanner;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class GetDataFromKeyBoardAndStoreInDB {

public static void main(String[] args) {

  Scanner s = new Scanner(System.in);

  Product p = new Product();
  p.setPid(s.nextInt());
  p.setName(s.next());
  p.setPrice(s.nextDouble());

  Configuration cfg = new Configuration(); 
  cfg.configure();
  SessionFactory sf = cfg.buildSessionFactory();
  Session hsession = sf.openSession();
  hsession.beginTransaction();

  hsession.save(p);

  hsession.getTransaction().commit();
  hsession.close();
  sf.close();
}

}

输入

115
Hello World
Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextDouble(Scanner.java:2387)
    at info.code.GetDataFromKeyBoardAndStoreInDB.main(GetDataFromKeyBoardAndStoreInDB.java:18)

-- 上面的代码在提供 HelloWorld 作为输入时工作正常,但在提供 Hello World 时却不行 .此方法是否不接受带空格的字符串。

最佳答案

Scanner 使用分隔符模式将其输入分成标记,默认情况下匹配空格,如果下一个标记与 Integer 不匹配,则抛出 InputMismatchException /String/Double/... 正则表达式(取决于您调用的方法),或者超出范围。这就是为什么在 Hello World 中使用空格时抛出此异常的原因(第三个标记的类型是 String 而不是 double)。

关于从键盘获取字符串中的 java.util.InputMismatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24405848/

相关文章:

java - @GenerateValue 不适用于非 id 字段

java - 如何 BatchUpdateSpreadsheetRequest google Sheets java api 中的特定工作表选项卡?

Java watchservice,如何找到创建文件的目录?

java - 从按钮单击调用的 jsp scriptlet 函数

actionscript-3 - Actionscript 3 顶级异常处理

java - 如果用户未输入二进制值,如何抛出异常

java - 将异常转换为 JSON

java - 抛出检查异常

c++ - std::throw_with_nested() 在内存不足的情况下调用 std::terminate()

java - 无法修复 "R cannot be resolved to a variable"