2016-11-12 25 views
-1

编辑:所以,我现在有点修复它。刚刚添加了一个输入长度验证,它工作正常。做这样的:尽管处于界限,但在字符串 - >字符转换上出现越界错误

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

我有了这个方法,它在一个字符串,分割字符串,第一个字母转换为字符,然后评估它是否是一个字母或数字。令牌[]是1而不是0,因为我接收的字符串有一个空格,当我调试时,“bench”变成了“”,“b”,“e”,“n”,“c”, “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数据库,因此可能在获取该数据之前调用此方法?因此试图调用空值的方法?

+0

你的分裂与空字符串的输入,所以它当然不会拆分任何东西,你的令牌变种会是一个长度为1的字符串数组,同时你要求回顾一下[1]。 Anywat toCharArray的方式http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray() –

+0

@AntonioCalì我认为split(“”)会分裂这个词变成信件?调试表明这是正确的。 – theRealOne

+1

而不是使用拆分,你可以简单地使用input.toCharArray()然后检查第一个字符 –

回答

0

我已经使用这个固定:

if(input.length() != 0) 

再进的charAt结构