Java输入带空格姓名后取金额抛InputMismatchException,求空格检查函数
检查字符串是否包含空格的现成方法
Java的String类自带两种简单方法可以判断字符串里有没有空格:
contains()方法:直接传入空格字符就能判断,返回布尔值if (name.contains(" ")) { error = true; }indexOf()方法:如果返回值不是-1,就说明字符串里有空格if (name.indexOf(" ") != -1) { error = true; }
顺便给你提个代码优化建议
你现在用sc.next()读名字,这个方法只会读到第一个空格就停。比如用户输入Mary Smith,name只会拿到Mary,剩下的Smith会留在输入缓冲区里,后面调用sc.nextDouble()时,程序会尝试把Smith转成double,直接抛出InputMismatchException——这也是你遇到问题的根源。
所以更靠谱的做法是用sc.nextLine()读取完整的一行输入,同时要处理之前输入留下的换行符。修改后的名字校验部分可以改成这样:
do { if(error) System.out.println("Sorry, error. Try again"); error = false; System.out.print("Enter your name : "); // 清除之前输入操作留下的换行符 if (sc.hasNextLine()) { sc.nextLine(); } name = sc.nextLine().trim(); // 去掉首尾空格,防止用户只输入空格 // 同时判断空字符串和包含空格的情况 if(name.isEmpty() || name.contains(" ")) { error = true; } } while(error);
另外注意,判断字符串为空别用name=="",要用name.isEmpty()或者name.length() == 0,因为==比的是对象地址,不是字符串内容。
内容的提问来源于stack exchange,提问作者Super Coder
相关产品推荐
相关产品推荐

