Integer.parseInt失败'输入字符串:“5000”'

时间:2017-10-08 18:58:50

标签: java int bufferedreader filereader parseint

我会承认,我很难过。这不是双重的。它不在整数范围之外。这不是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().

也没有

2 个答案:

答案 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();
}`