我想将Object []中的String解析为Integer并将其保存在同一个地方:
public class ArrParseTest {
public static void main(String[] args) {
Object[] arr = new Object[2];
String input = "Boo;Foo;1000";
Integer somInt = new Integer(0);
arr = input.split(";", -1);
somInt = Integer.parseInt((String) arr[2]);
arr[2] = somInt;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
但我总是收到这个例外:
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
at main.ArrParseTest.main(ArrParseTest.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
我不明白为什么我不能简单地将解析后的对象保存到数组中,我就是
Object [] arr = new Object [2];
正是为了在Array中存储不同的对象。
现在有人如何将这个String解析为整数并将其保存在数组中?
答案 0 :(得分:10)
这是导致你看到的直接问题的问题:
arr = input.split(";", -1);
您将类型为String[]
的对象的引用分配给Object[]
类型的变量。这很好,但这意味着你不能在数组中存储非字符串引用。
你可能想要:
String input = "Boo;Foo;1000";
Integer someInt = new Integer(0);
String[] split = input.split(";", -1);
Object[] arr = new Object[split.length];
System.arraycopy(split, 0, arr, 0, split.length);
这会将String[]
的内容复制到相同大小的Object[]
。然后,您可以为Object[]
的任何元素分配新值, 新值可以是Integer
引用。
顺便说一下,为什么要将someInt
初始化为您忽略的值,这一点尚不清楚。实际上,您甚至不需要变量:
arr[2] = Integer.valueOf((String) arr[2]);
或
arr[2] = Integer.valueOf(split[2]);
答案 1 :(得分:1)
抛出ArrayStoreException以指示已尝试将错误类型的对象存储到对象数组中。
Object[] arr = new Object[2];
String input = "Boo;Foo;1000";
Integer somInt = new Integer(0);
arr = input.split(";", -1);
somInt = Integer.parseInt(arr[2].toString());
arr[2] = ""+somInt; //storing non string value will give error
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
答案 2 :(得分:0)
ArrayStoreException
是运行时异常,当您添加到数组的对象类型与数组元素应该是的对象类型不同时发生。
在您的代码中,当somInt
分配给arr[2]
时,数组会保存String
类型的对象,而someInt
是Integer
。您可以按如下方式指定String
:
arr[2] = "" + somInt;
答案 3 :(得分:0)
split
的 String
方法返回String
类型的数组
并且您尝试将整数值存储到该行的String
类型数组中:
arr[2] = somInt;
由于String
扩展Object
,您不会收到编译错误。但是你得到运行时错误,因为在执行时arr
变成String
类型数组。