当前位置: 首页 > 知识库问答 >
问题:

JavaNumberFormatException对于输入字符串[重复]

韩乐湛
2023-03-14

当前正在编辑代码以创建跳过列表,我正在尝试读取一个文件,其中包含需要插入、搜索或删除的数据(分别由i、s、d表示)。

当试图运行它时,我被抛出数字格式异常,当它在catch语句中打印堆栈跟踪时,它看起来好像没有读取第一个字符,应该是“i”。

以下是我的主代码当前的样子,因为这似乎就是问题所在

public static void main(String[] args) {

    Main list = new Main();

    boolean result = false;

    try {

        BufferedReader br;

        br = new BufferedReader(new FileReader("text.txt"));

        StringBuilder sb = new StringBuilder();

        String line = br.readLine();

        while (line != null) {

            sb.append(line);

            sb.append(System.lineSeparator());

            line = br.readLine();

        }

        String everything = sb.toString();

        String[] input = everything.split(",");

        for (int i = 0; i < input.length; i++) {

            String temp = input[i];
            System.out.printf("%s", input[i]);
            if (temp.startsWith("i")) {

                result = list.insert(Integer.parseInt(temp.substring(2)));

            } else if (temp.startsWith("s")) {

                Node node = list.search(Integer.parseInt(temp.substring(2)));

                if (node != null) {

                    System.out.println(temp.substring(2) + " found");

                } else {

                    System.out.println(temp.substring(2) + " not found");

                }

            } else if (temp.startsWith("d")) {

                result = list.delete(Integer.parseInt(temp.substring(2)));

                if (result == true) {

                    System.out.println(temp.substring(2) + " deleted");

                } else {

                    System.out.println(temp.substring(2) + " not deleted");

                }

            } else if (temp == "p") {

                System.out.println("For the input file ");

                System.out.println("With the RNG succeeded");

                System.out.println("The current skip list is shown below");

                list.printAll();

            }


        }

    } catch (Exception e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

}

这是我的示例输入数据文本文件的样子

i 503
i 302
i 596
i 198
i 270
i 629
i 603
i 110
i 354
i 947
p
q

当它运行并吐回堆栈跟踪时,它会说

java.lang.NumberFormatException: For input string: "503
i 302
i 596
i 198
i 270
i 629
i 603
i 110
i 354
i 947
p
q
"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at Main.main(Main.java:295)

所以我现在猜测,出于某种原因,当503肯定在文本数据文件中时,它没有读取503前面的“i”

共有1个答案

丌官子安
2023-03-14

问题是,您正在使用逗号分割数据,而您的数据根本没有逗号。所以当它达到温度时。子字符串(2),它实际使用以下字符串并尝试解析:

503
i 302
i 596
i 198
i 270
i 629
i 603
i 110
i 354
i 947
p
q

这是整个文件内容(不是数字)。

只需替换逗号(String[]input=everything.split(“,”) )具有新行字符(字符串[]输入=所有内容。拆分(“\n”) ),它应该可以工作。

 类似资料: