2016-05-19 78 views
0

分析我的Android應用程序崩潰,我發現一個奇怪的,只發生在三星Galaxy Note 3設備。這裏是崩潰堆棧的頂部:Android,java String.trim()拋出ArrayIndexOutOfBoundsException

------- 
java.lang.ArrayIndexOutOfBoundsException 
java.lang.String.trim(String.java:1416) 
------- 

有沒有人知道它是如何可能的?

它看起來像製造商略有更新的原始版本的字符串類。

評論: 問題是,字符串對象是不可變的 - 我不能以任何方式修改內部字符數組或字符串長度。這就是爲什麼trim()方法在理論上不應該拋出這種類型的異常:trim()方法必須自己檢查數組邊界(它確實在默認實現中執行)。

+1

char[] .... ....... – sushildlh

+0

它可以在其他設備上,除了三星note3 –

+0

你在其他設備上也嘗試過嗎? – prat

回答

0

如果您想確保它是獨立於供應商的100%,則可能需要製作自己的trim()版本。

這裏是什麼trim()在Oracle JDK版本是這樣的:

public String trim() { 
    int len = value.length; 
    int st = 0; 
    char[] val = value; /* avoid getfield opcode */ 

    while ((st < len) && (val[st] <= ' ')) { 
     st++; 
    } 
    while ((st < len) && (val[len - 1] <= ' ')) { 
     len--; 
    } 
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this; 
} 

在上述片段的value是您訪問中不存在額外的數組索引String

+0

也許我會的。我只是想確保我沒有錯過任何東西。 – Artem

相關問題