2016-05-19 119 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

相关问题