创建新对象会将所有现有对象设置为空 (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 会更容易。
我有这个方法,它应该在找到 + 或 - 的符号时切割字符串(它是导数计算器的一部分,所以我的想法是得到一堆由 + 或 - 分隔的小字符串然后将它们一一推导。这就是为什么我要搜索左括号和右括号的原因) 问题是:调用 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 会更容易。