我目前正在尝试使用以下代码将字符串转换为数字:
public static int getDigit(String whole, int sub) {
int d = Integer.parseInt(whole.substring(sub, sub+1));
print(Integer.toString(d));
return d;
}
但是,当我尝试获取最后一个数字时,遇到了错误,虽然我知道原因,但是否有一种方法可以克服这个问题,例如执行此操作的算法(有效方法),而不是我的示例:
public static int getDigit(String whole, int sub) {
int d = 0;
if (sub < whole.length())
d = Integer.parseInt(whole.substring(sub, sub+1));
else
d = Integer.parseInt(whole.substring(sub));
print(Integer.toString(d));
return d;
}
注意:请忽略代码中的任何错误,因为我没有测试第二个示例。显然,第一个示例有错误。
sub
等于字符串的长度,那么您期望什么输出?它指向字符串结尾后面;数字的索引为0
到whole.length() - 1
。在字符串结尾后面没有要解析的数字。 - Jesperd
尚未被初始化。 - copegArryIndexOutOfBoundsException
- 它来自else
部分 - 只需将其删除即可! - Nir Alfasid
(没有赋值)然后尝试访问它 - 它会生成一个编译时错误。话虽如此,如果你看一下当前版本的代码:将int d = 0
修改为int d
不会生成这样的异常,因为d
在被访问/返回之前已经被赋值了。但是,你又说对了:在代码的先前版本中,d
被用于if
条件中,这将生成编译错误。感谢你的纠正! - Nir Alfasi