Java NumberFormatException对于输入字符串[重复]

问题描述 投票:1回答:1

当前正在编辑代码以创建跳过列表,并且我试图读取一个文件,该文件具有需要插入,搜索或删除的数据(分别由i,s,d表示。

[我在尝试运行它并在catch语句中打印stacktrace时似乎抛出了数字格式异常,看起来好像没有读取第一个字符,应该是“ 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”

java numberformatexception
1个回答
2
投票

问题是您要用逗号分割数据,而数据根本没有逗号。因此,当到达temp.substring(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)替换逗号(String[] input = everything.split("\n");),它就可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.