Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串的最大长度[]_Java_String - Fatal编程技术网

Java 字符串的最大长度[]

Java 字符串的最大长度[],java,string,Java,String,我有一个长字符串,我想使用如下字符串数组来解析它: String data = ... very long String delimited by spaces... String[] parse = data.split(" "); 但我得到了以下错误: java.lang.ArrayIndexOutOfBoundsException: 4617 字符串数组的最大长度是否可能是4617?Java中字符串数组的最大长度是Integer.MAX\u VALUE-5。使用我的64位操作系统检查此

我有一个长字符串,我想使用如下字符串数组来解析它:

String data = ... very long String delimited by spaces...
String[] parse = data.split(" ");
但我得到了以下错误:

java.lang.ArrayIndexOutOfBoundsException: 4617

字符串数组的最大长度是否可能是4617?

Java中字符串数组的最大长度是Integer.MAX\u VALUE-5。使用我的64位操作系统检查此初始化:String[]myStringArray=new String[Integer.MAX_VALUE-5];。 Integer.MAX_VALUE-4或更大的数字给出java.lang.OutOfMemoryError错误。限制对您来说可能不同,因为它依赖于机器和操作系统

即使超出此范围,也会看到java.lang.OutOfMemoryError,而不是java.lang.ArrayIndexOutOfBoundsException


问题肯定出在代码的其他部分。

否。。数组大小没有最大长度。尽管您可能会遇到OutOfMemory错误


上面的代码运行良好,可以打印1000个

使用enchance for loop在parse上迭代..在代码的其他地方,您使用了错误的索引进行解析

for(String s:parse){
 System.out.println(s);
}

不,不是。不确定,可能是String.split中正则表达式的异常?我们可能能够在该异常的完整堆栈跟踪方面为您提供更多帮助。一行并不能告诉我们太多。为什么不再添加几个由空格分隔的单词并调用parse.length?。请添加整个stacktrace。完整的stacktrace是什么?您应该获得发生异常的行号。在你展示的代码中没有,我试着复制它。我有一个包含5000多个单词的字符串,拆分工作正常,并且可以读取数组。你的问题一定出在别的地方了。回答得好,我觉得操作码出了问题。你说得对,我在代码中发现了一个小错误,天哪:-谢谢you@gaffcz你能和我们分享你的错误吗?在哪里指定它的整数,最大值-5?@KickButtowski-这个答案是错误的。。对象[]o=新对象[Integer.MAX_VALUE-80];,我得到了OME。不要接受你在这里看到的任何正确的东西。。逻辑思考。答案还取决于GC的行为、分配的堆空间等。数组的大小不能超过Integer.MAX_值,因为该语言将数组的大小指定为int类型。但是,实际的限制可以更低。@nhahtdh-他们在哪里提到过?每个维度表达式进行一元数字升级§5.6.1。升级的类型必须为int,否则会发生编译时错误。数组的长度只能是int类型。
 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);
}
for(String s:parse){
 System.out.println(s);
}