Java Integer.parseInt失败';对于输入字符串:";5000“';
我承认,我被难住了。这不是双人房。它不在整数范围之外。不是楠。就我所知,它在任何形式上都不是一个非整数 为什么我会犯这样的错误 下面是导致它的代码:Java Integer.parseInt失败';对于输入字符串:";5000“';,java,int,bufferedreader,filereader,parseint,Java,Int,Bufferedreader,Filereader,Parseint,我承认,我被难住了。这不是双人房。它不在整数范围之外。不是楠。就我所知,它在任何形式上都不是一个非整数 为什么我会犯这样的错误 下面是导致它的代码: 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 Buff
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()。
很可能在文件行中的某个位置存在无法打印的字符。请考虑下面的示例(在java 9 JS壳中测试)
这里字符串的末尾包含“bell”字符。它使解析失败,而不是打印在异常文本中。我想你也有类似的想法。验证这一点最简单的方法是检查
String line = bufferedReader.readLine();
System.out.println("line length: " + line.length());
除了
4
之外的值将支持我的想法。我也有同样的问题。我用缓冲读取器读取一个平面文件,并将内容保存为String类型的ArrayList,但在从列表中检索字符串值时执行integer.parse时,我意识到从文件读取的字符串中有大量垃圾,因为我得到了java.lang.NumberFormatException
这是我用代码(从我的主方法调用)实现的解决问题的方法:
`
//班级
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();
}`
尝试打印
Arrays.toString(line.toCharArray())
(其中line是从读卡器读取的内容)。字符串中可能有不可打印的字符。@AndyTurner这似乎就是它……不知何故。[,5,0,0,0]已打印。感谢您的帮助,非常感谢。看起来原始文本文件似乎有点问题,即使我看不见。我重新编写了它,现在效果很好。:)没问题。这是一个简单的调试技巧,通常会有意想不到的帮助。
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();
}`