我会承认,我很难过。这不是双重的。它不在整数范围之外。这不是NAN。就我所知,它不是任何形状或形式的非整数。
为什么我会收到错误?
以下是导致它的代码:
String filename = "confA.txt";
//Make a new filereader to read in confA
FileReader fileReader = new FileReader(filename);
//Wrap into a bufferedReader for sanity's sake
BufferedReader bufferedReader = new BufferedReader(fileReader);
//Get the port number that B is listening to
int portNum = Integer.parseInt(bufferedReader.readLine());
在最后一行失败,说明:
java.lang.NumberFormatException:对于输入字符串:“5000”
这是我想要的号码。
我也尝试了
Integer portNum = Integer.parseInt(bufferedReader.readLine());
但这也不起作用。 valueOf().
答案 0 :(得分:3)
很可能在你的文件行中某处有一些不可打印的字符。请考虑以下示例(这是在Java 9 jshell中测试的)
jshell> String value = "5000\u0007";
value ==> "5000\007"
jshell> Integer.parseInt(value);
| java.lang.NumberFormatException thrown: For input string: "5000"
| at NumberFormatException.forInputString (NumberFormatException.java:65)
| at Integer.parseInt (Integer.java:652)
| at Integer.parseInt (Integer.java:770)
| at (#15:1)
此处字符串末尾包含“bell”字符。它使解析失败,而不是在异常文本中打印。我觉得你有类似的东西。验证这一点的最简单方法是检查
String line = bufferedReader.readLine();
System.out.println("line length: " + line.length());
4
以外的值将支持我的想法。
答案 1 :(得分:0)
我遇到了同样的问题。我正在使用Buffered reader读取平面文件并将内容保存为String类型的ArrayList,但是当从列表中检索字符串值时执行integer.parse时,我意识到存在大量垃圾。从文件读取的字符串,因为我得到了java.lang.NumberFormatException。
这是我用代码实现的方法(从我的main方法调用)来解决问题:
` //班级
private static final Pattern numericPattern = Pattern.compile("([0-9]+).([\\\\.]{0,1}[0-9]*)");
// in main method after reading in the file
String b = stripNonNumeric(stringvaluefromfile);
int a = Integer.parseInt(b);
public static String stripNonNumeric(String number) {
//System.out.println(number);
if (number == null || number.isEmpty()) {
return "0";
}
Matcher matcher = numericPattern.matcher(number);
// strip out all non-numerics
StringBuffer sb = new StringBuffer("");
while (matcher.find()) {
sb.append(matcher.group());
}
// make sure there's only one dot
int prevDot = -1;
for (int i = sb.length() - 1; i >= 0; i--) {
if (sb.charAt(i) == '.') {
if (prevDot > 0) {
sb.deleteCharAt(prevDot);
}
prevDot = i;
}
}
if (sb.length() == 0) {
sb.append("0");
}
return sb.toString();
}`