获取子字符串的最有效方法,不超过字符串长度。

3

我目前正在尝试使用以下代码将字符串转换为数字:

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;
}

注意:请忽略代码中的任何错误,因为我没有测试第二个示例。显然,第一个示例有错误。


2
如果 sub 等于字符串的长度,那么您期望什么输出?它指向字符串结尾后面;数字的索引为 0whole.length() - 1。在字符串结尾后面没有要解析的数字。 - Jesper
3
这段代码不应该能够编译通过——变量d尚未被初始化。 - copeg
1
@Daedric,评论的第一部分根本没有讨论打印 - 它是关于您正在获取的 ArryIndexOutOfBoundsException - 它来自 else 部分 - 只需将其删除即可! - Nir Alfasi
2
如果这是伪代码,你应该在问题中提到它。此外,这个“伪代码”看起来非常像Java,你甚至将其标记为“java”。在阅读了你(有点粗鲁的)评论之后 - 我发现你的问题根本不清楚。与其对试图帮助你的人无礼,你可以尝试通过解释你究竟想要做什么,解释这段代码仅用于演示并应被视为伪代码等方式使你的问题更清晰。祝好运! - Nir Alfasi
1
@copeg 你说得对,如果声明 d(没有赋值)然后尝试访问它 - 它会生成一个编译时错误。话虽如此,如果你看一下当前版本的代码:将 int d = 0 修改为 int d 不会生成这样的异常,因为 d 在被访问/返回之前已经被赋值了。但是,你又说对了:在代码的先前版本中,d 被用于 if 条件中,这将生成编译错误。感谢你的纠正! - Nir Alfasi
显示剩余9条评论
1个回答

3

如果您期望一个单个字符作为“数字”,另一种选择是通过提取char并将其转换为int来处理传递的索引处的字符。

可以使用Character类中的getNumericValue(char ch)方法来完成此操作。

int d = Character.getNumericValue(whole.charAt(sub));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接