我有一个很长的String
,我想用这样的字符串数组来解析它:
String data = ... very long String delimited by spaces...
String[] parse = data.split(" ");
但是我收到以下错误:
java.lang.ArrayIndexOutOfBoundsException: 4617
是否有可能,String数组的最大长度为4617?
答案 0 :(得分:4)
Java中字符串数组的最大长度为Integer.MAX_VALUE - 5
。 (通过初始化检查我的64位操作系统:String[] myStringArray = new String[Integer.MAX_VALUE-5];
。
Integer.MAX_VALUE-4
或更大的数字会给我java.lang.OutOfMemoryError
错误。您的限制可能不同,因为它取决于机器和操作系统。)
即使你超越了这一点,你也会看到java.lang.OutOfMemoryError
,而不是java.lang.ArrayIndexOutOfBoundsException
。
问题肯定在于代码的其他部分。
答案 1 :(得分:1)
使用增强的for循环迭代解析。在代码中的其他地方,你使用了错误的解析索引
for(String s:parse){
System.out.println(s);
}
答案 2 :(得分:0)
否..数组的大小没有最大长度。虽然您可能遇到OutOfMemoryError
。
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("");
for(int i=0;i<10000000000l;i++){
sb.append(i).append(" ");
}
System.out.println(sb.toString().split("\\s").length);
}
以上代码可能会在某些计算机上提供OutOfMemoryError
(它在我的网站上执行。尝试使用jdk 6)
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("");
for(int i=0;i<10000;i++){
sb.append(i).append(" ");
}
System.out.println(sb.toString().split("\\s").length);
}
上面的代码工作正常并打印1000