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値でメソッドを呼び出そうとしていますか?
のcharAt構造に入る前に
を長さ1の文字列の配列になります。一方、tokes [1]を取得するように要求しています。 Anywat toCharArrayは方法ですhttp://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray() –
@AntonioCalìsplit( "")は単語を分割すると考えました手紙に?デバッグはそれが正しく起こっていることを示しています。 – theRealOne
splitを使用する代わりに、単にinput.toCharArray()を使用して、最初の文字を確認することができます –