【发布时间】:2015-07-17 04:29:03
【问题描述】:
我目前正在尝试使用此代码将字符串转换为数字:
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。字符串末尾没有要解析的数字。 -
这甚至不应该编译 -
d尚未初始化。 -
@Daedric 评论的第一部分根本没有讨论打印 - 它是关于你得到的
ArryIndexOutOfBoundsException- 它来自else部分 - 只需删除它! -
如果那是伪代码,您应该在问题中提及它。此外,这个“伪代码”看起来很像 Java,您甚至将其标记为“java”。在阅读了您的(有点粗鲁)cmets 之后-我发现您的问题根本不清楚。与其对试图帮助您的人无礼,您可以尝试通过解释 what 您正在尝试做什么来让您的问题更清楚,并解释此代码仅用于演示并且应该被视为伪等。祝你好运!
-
@copeg 你是对的,如果你声明
d(没有赋值)然后尝试访问它——它会产生一个编译时错误。也就是说,如果您查看当前版本的代码:将int d = 0修改为int d不会产生这样的异常,因为d在访问/返回之前已被分配。但同样,您是对的:在之前版本的代码中,d用于if条件,这会产生编译错误。谢谢指正!