String []的最大长度

时间:2014-10-30 06:50:44

标签: java string

我有一个很长的String,我想用这样的字符串数组来解析它:

String data = ... very long String delimited by spaces...
String[] parse = data.split(" ");

但是我收到以下错误:

java.lang.ArrayIndexOutOfBoundsException: 4617

是否有可能,String数组的最大长度为4617?

3 个答案:

答案 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