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