我有很長的String
,我想用字符串數組這樣分析它:字符串的最大長度[]
String data = ... very long String delimited by spaces...
String[] parse = data.split(" ");
,但我得到了以下錯誤:
java.lang.ArrayIndexOutOfBoundsException: 4617
是它可能,String數組的最大長度是4617?
我有很長的String
,我想用字符串數組這樣分析它:字符串的最大長度[]
String data = ... very long String delimited by spaces...
String[] parse = data.split(" ");
,但我得到了以下錯誤:
java.lang.ArrayIndexOutOfBoundsException: 4617
是它可能,String數組的最大長度是4617?
Java中字符串數組的最大長度爲Integer.MAX_VALUE - 5
。 (用我的64位操作系統進行初始化檢查:String[] myStringArray = new String[Integer.MAX_VALUE-5];
。 Integer.MAX_VALUE-4
或更大的數字會給我0123'錯誤。由於機器和操作系統的不同,這個限制可能會有所不同)。
即使您超出這個範圍,您將看到java.lang.OutOfMemoryError
,而不是java.lang.ArrayIndexOutOfBoundsException
。
問題是肯定與您的代碼的其他部分。
雅佳答案我覺得操作代碼有問題。 – 2014-10-30 06:58:27
你是對的,我在我的代碼中發現了一個微不足道的錯誤,omg :-(謝謝 – gaffcz 2014-10-30 06:59:21
@gaffcz你可以與我們分享你的錯誤嗎? – 2014-10-30 06:59:51
不..數組大小沒有最大長度。雖然你可能碰到一個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
數組的大小不能超過'Integer.MAX_VALUE',因爲該語言將數組大小指定爲'int'類型。但實際的限制可能會更低。 – nhahtdh 2014-10-30 08:04:47
@nhahtdh - 他們在哪裏提到它? – TheLostMind 2014-10-30 08:34:22
[JLS 8.0 - 章節15.10.1(http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.10.1)'每個維度表達經歷一元數值促銷(第5.6.1節)。升級類型必須是int,否則會發生編譯時錯誤。數組的長度只能是int類型。 – nhahtdh 2014-10-30 08:44:51
使用循環迭代解析..在你的代碼中的其他地方你已經使用錯誤的索引進行解析
for(String s:parse){
System.out.println(s);
}
不,它不是。不確定,可能是'String.split()'中的正則表達式的異常?我們可以通過該例外的完整堆棧跟蹤來幫助您。一條線沒有告訴我們很多。 – markspace 2014-10-30 06:51:43
爲什麼不添加多個由空格分隔的單詞並調用'parse.length()'?. – TheLostMind 2014-10-30 06:52:52
請添加整個堆棧跟蹤。 – Jens 2014-10-30 06:53:11