2016-11-12 1 views
-1

EDIT:今のところ私はそれを修正しました。ちょうど入力の長さの検証を追加し、それは正常に動作します。このようにそれをやって:インバウンドにもかかわらず文字列 - > char変換で範囲外エラーが発生する

if(input.length() != 0){ 
} 

私は、文字列を取り込み、このメソッドを持って、文字列を分割文字への最初の文字を変換し、それが文字または数字であるかどうかを評価します。私が取り込んでいる文字列には空白があり、デバッグ時に "ベンチ"のようなものが ""、 "b"、 "e"、 "n"、 "c"になるので、tokens []は0ではなく1になります。 "h"。私がデバッグしてメソッドをステップ実行すると、すべてうまく動作するので、変です。なぜこのエラーが発生するのですか?

文字列は「デッドリフト」です

// comments are exactly what debug gives me 
boolean isExerciseName(String input) { // input: "Dead-Lift" 
    String[] tokens = input.split(""); // tokens: {"", "D", "e", "a", "d", + 5 more} 

    boolean isExercise = true; // isExercise: true 

    char c = tokens[1].charAt(0); // c: 'D' 68 
    if (Character.isDigit(c)) { // c:'D' 68 
     isExercise = false; 
    } 

    return isExercise; 

} 

cはちょうどそれが必要のように「D」となりますのでだから、明らかに私は、範囲外ではありませんよ。

エラーは、具体的に:

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 

toCharArrayは、良いアイデアのように見えるんので、ここではその形態である:

boolean isExerciseName(String input) { 
    char[] tokens = input.toCharArray(); // tokens: {D, e, a, d, etc} 

    boolean isExercise = true; 

    char c = tokens[0]; // c: 'D' also, this is the line that errors out 
    if (Character.isDigit(c)) { 
     isExercise = false; 
    } 

    return isExercise; 

} 

そして、私はまだエラーに

を取得し、私はまた、私はメソッドを呼び出すエラーを取得:

if(isExerciseName(itemString) && !itemKey.equals("private_journal)){ 

今、私が気づいたばかりの奇妙なことは、エラーメッセージをデバッグして無視するときにプログラムを「待機」させるとうまくいきます。取得している入力はFirebaseデータベースから取得されているので、そのデータを取得する前にこのメソッドが呼び出されている可能性があります。したがって、null値でメソッドを呼び出そうとしていますか?

+0

のcharAt構造に入る前に

if(input.length() != 0) 

を長さ1の文字列の配列になります。一方、tokes [1]を取得するように要求しています。 Anywat toCharArrayは方法ですhttp://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray() –

+0

@AntonioCalìsplit( "")は単語を分割すると考えました手紙に?デバッグはそれが正しく起こっていることを示しています。 – theRealOne

+1

splitを使用する代わりに、単にinput.toCharArray()を使用して、最初の文字を確認することができます –

答えて

0

私はこの使用して、それを修正した:それはそれは意志のものとあなたのトークンのVARを分割しませんもちろんので、あなたは、空の文字列を使用して入力を分割

関連する問題