Java:使用子字符串时出现NullPointerException

3

我在一个方法中遇到了问题。请注意,我正在大学学习Java,所以可能对简单的东西不是很熟悉。下面是一个用于添加表达式的方法。我遇到的问题在于x = x.substring.(1, x.length() - 1);,我得到了一个异常,内容如下:

Exception in thread "main" java.lang.NullPointerException

我不知道那是什么意思以及如何修复。如果你能指点我正确的方向,那就太好了。 谢谢。

public static int adder(String x){
    int total = 0;
    x = x.substring(1, x.length() - 1);
    sopln(x);
    String[] nums = x.split("\\+");
    for(int i = 0; i < nums.length; ++i){
        if(nums[i].charAt(0) == ' ' || nums[i].charAt(nums[i].length()-1) == ' '){
            sopln("ERROR: Excess whitespace identified.");
            nums[i] = nums[i].trim();
        }
        nums[i] = nums[i].replaceAll(" ", "");
        if(nums[i].charAt(0) == '-')
            total -= Integer.parseInt(nums[i]);

        else
            total += Integer.parseInt(nums[i]);
    }
    return total;

}

4
错误信息将给出一个行号。跳转到该行。查看代码。思考为什么该变量为空。 - Paul Tomblin
1
由于错误发生在 x=x.substring.(1,x.length() - 1);,所以应该是 xnull... x 被作为参数传递,那么你是如何调用 adder 的??? - olydis
如果调用 adder 函数时传入 null 或 adder(""),该行代码会引发错误。 - arynaq
我认为如果你的String等于"",那么会有问题,因为你从子字符串的第1个字符开始,一直到.length() - 1,这将等于-1。 - Michael Yaworski
当出现这个异常时,x的值是多少? - kdureidy
3个回答

0
我遇到的问题出现在 x=x.substring.(1,x.length() - 1); 这里。
这意味着你在某个时候使用了一个 null 参数调用了 adder。这是你在那个点上得到 NPE 的唯一方式。
找出参数为什么为空以及原因,然后修复它。
(它可能是显式的 null,但更有可能来自未初始化的字段或从某些返回 null 表示某些情况的方法;例如,当读取器到达 EOF 位置时,BufferedReader.readLine() 返回 null。)

0

这可能意味着您的字符串x为null,并未实际设置为字符串对象。

您是如何调用该方法的?

当您使用硬编码字符串进行调用时,是否会出现此问题?

int num = adder("string checking in");

如果不是,那么在您的代码的上游某处,您传递到 adder 方法中的 String 变量为空。


我不知道如何格式化我的注释,但是:我正在一个for循环中调用adder函数,其中我说:“int total = adder(string[i])”。 - user2805172
你确定 string[i] 确实被设置为字符串了吗? - LaggKing

0

在调用 adder(the_string) 时,您正在传递一个空值,其中 the_string 为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接