这是我的代码
while(scan_movie_theater.hasNext()){
line = scan_movie_theater.next();
i = scan_movie_theater.nextInt();
System.out.println(line);
System.out.println(i);
}
scan_movie_theater.close();
我的文字就像
dsa 435
salon 123
xxxx 123214324
trump tower 15
如何修复inputmismatchexception?
谢谢。
答案 0 :(得分:0)
尝试按照。并强烈建议调试您的代码,看看出了什么问题。我是你最好的伙伴。 :)
while (scan_movie_theater.hasNextLine()) {
String line = scan_movie_theater.nextLine();
String[] words = line.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
System.out.println(words[0]);
System.out.println(Integer.valueOf(words[1]));
}
然后你可以拆分任何数字的字符串。如果您的格式一致,这应该有效。请参阅字符串拆分号here.
答案 1 :(得分:0)
方法Scanner.next()定义为here
查找并返回此扫描仪的下一个完整令牌。一个 完整标记之前和之后是匹配的输入 分隔符模式。
默认分隔符是\ p {javaWhitespace} +(由Scanner.delimiter()返回),它匹配isWhitespace()验证的任何字符。
对于你的情况,如果你确定一个整数是行中的最后一个标记,那么在调用nextInt()之后调用.nextLine():
while(scan_movie_theater.hasNext()){
line = scan_movie_theater.next();
i = scan_movie_theater.nextInt();
scan_movie_theater.nextLine();// catch the carriage return and point to the next line if it exist
System.out.println(line);
System.out.println(i);
}
scan_movie_theater.close();
答案 2 :(得分:0)
嗯,你说有两个单词的空格特朗普塔,这当然会有例外。
<强>溶液强>
您可以捕获该异常并检查其是 int 还是字符串 ..
while(scan_movie_theater.hasNext()){
line = scan_movie_theater.next();
try {
int s = Integer.parseInt(line );
System.out.println("I am integer" + s);
} catch(NumberFormatException e) {
System.out.println("I am String" + line);
}
}
scan_movie_theater.close();
答案 3 :(得分:0)
最有可能首先next()
选择dsa
,然后nextInt()
选择435,第二next()
选择回车。因此,第二个nextInt()
选择salon
,导致您的不匹配异常。就像我说的那样,只需逐行阅读,拆分行并解析int。
编辑:
对于两个或更多单词,您需要获取整数的索引并获取子字符串
public class Test {
public static void main(String[] args) {
String line = "Trump Tower 23445";
int pos = line.replaceFirst("^(\\D+).*$", "$1").length();
String number = line.substring(pos);
System.out.println(Integer.parseInt(number));
System.out.println(line.substring(0, pos));
}
}
结果
23445
特朗普大厦
如果正则表达式太难理解,你总是可以创建一个方法来获取第一个int的索引
public static int getIndexOfFirstInt(String line) {
char[] chars = line.toCharArray();
for (char c : chars) {
if (Character.isDigit(c)) {
return line.indexOf(c);
}
}
return -1;
}
答案 4 :(得分:0)
如果在整数之前字符串中有空格,请尝试此操作。
while (scan_movie_theater.hasNext()) {
String[] data = scan_movie_theater.nextLine().split(" +");
i = Integer.parseInt(data[data.length - 1]);
line = data[0];
for (int j = 1; j < data.length - 2; ++j)
line +=" "+ data[j];
System.out.println(line);
System.out.println(i);
}
scan_movie_theater.close();