创建新对象会将所有现有对象设置为空 (Java)

Creating new object sets all existing ones to null (Java)

我有这个方法,它应该在找到 + 或 - 的符号时切割字符串(它是导数计算器的一部分,所以我的想法是得到一堆由 + 或 - 分隔的小字符串然后将它们一一推导。这就是为什么我要搜索左括号和右括号的原因) 问题是:调用 res = new String(); 时它会创建一个新的 String,但它也会将数组中所有现有的 String 对象设置为 null,这意味着该方法的 return 将始终是一个数组,所有内容都设置为 null(除非它没有找到函数中的 + 或 - )。 有解决办法吗?

public static String[] cutString(String func)
        {
            
            int number_strings_res = 0;
            int number_parenthesis = 0;
            String[] res = new String[1];
            res[0] = new String(func);
            for(int i = 0; i < func.length(); i++)
            {
                if(func.charAt(i) == '+' || func.charAt(i) == '-')
                {
                    for(int j = 0; j < i; j++)
                    {
                        if(func.charAt(j) == '(')
                            number_parenthesis++;
                        if(func.charAt(j) == ')')
                            number_parenthesis--;
                    }
                    if(number_parenthesis == 0)
                    {
                        res[number_strings_res] = "";
                        for(int j = 0; j < i; j++)
                        {
                            res[number_strings_res] += func.charAt(j);
                        }
                        number_strings_res++;
                        res = new String[number_strings_res + 1];
                        res[number_strings_res] = new String(Character.toString(func.charAt(i)));
                        number_strings_res++;
                        res = new String[number_strings_res + 1];
                        res[number_strings_res] = new String();
                    }
                }
            }
            return res;
        }

res = new String[number_strings_res + 1] 分配一个新数组并将其存储到 res。这就是当前问题的根源。如果您不知道集合将持续多长时间,您可能应该使用 List,例如 ArrayList

When calling res = new String() ...

你没有这样的调用,无论如何都不会编译。

'res' 声明为引用字符串数组的变量。当您执行 res = new String[...] 时,您自然会替换整个字符串数组。

但是我真的搞不懂你的意图是什么?你想扩展数组吗?你不能,直接。

如果必须使用数组,请查看 Arrays.copyFrom。但是 ArrayList 会更容易。