2016-05-19 17 views
0

私のAndroidアプリを解析すると、Samsung Galaxy Note 3デバイスでのみ発生する奇妙なものが見つかりました。クラッシュスタックの先頭には次のようなものがあります:Android、java String.trim()throws ArrayIndexOutOfBoundsException

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

どのようにすれば可能ですか?

メーカーのやや古いバージョンのStringクラスのようです。

コメント: 問題はStringオブジェクトが不変であることです。何らかの形で内部文字配列または文字列長を変更できません。そのため、理論上のtrim()メソッドは、この種の例外を投げられるべきではありません:trim()メソッドは、配列境界をそれ自身でチェックする必要があります(デフォルト実装では本当にそうです)。

+1

char[]です.... ....... – sushildlh

+0

他のデバイスでは正常ですか?ノート3 –

+0

他のデバイスでも試しましたか? – prat

答えて

0

ベンダーに依存しないようにするには、独自のバージョンの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

関連する問題