-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数据库,因此可能在获取该数据之前调用此方法?因此试图调用空值的方法?
你的分裂与空字符串的输入,所以它当然不会拆分任何东西,你的令牌变种会是一个长度为1的字符串数组,同时你要求回顾一下[1]。 Anywat toCharArray的方式http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray() –
@AntonioCalì我认为split(“”)会分裂这个词变成信件?调试表明这是正确的。 – theRealOne
而不是使用拆分,你可以简单地使用input.toCharArray()然后检查第一个字符 –