【问题标题】:Most efficient way to get a substring without exceeding the string length在不超过字符串长度的情况下获取子字符串的最有效方法
【发布时间】: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 等于字符串的长度,那么你期望什么输出?它指向字符串末尾之后;数字有索引0whole.length() - 1。字符串末尾没有要解析的数字。
  • 这甚至不应该编译 - d 尚未初始化。
  • @Daedric 评论的第一部分根本没有讨论打印 - 它是关于你得到的 ArryIndexOutOfBoundsException - 它来自 else 部分 - 只需删除它!
  • 如果那是伪代码,您应该在问题中提及它。此外,这个“伪代码”看起来很像 Java,您甚至将其标记为“java”。在阅读了您的(有点粗鲁)cmets 之后-我发现您的问题根本不清楚。与其对试图帮助您的人无礼,您可以尝试通过解释 what 您正在尝试做什么来让您的问题更清楚,并解释此代码仅用于演示并且应该被视为伪等。祝你好运!
  • @copeg 你是对的,如果你声明d(没有赋值)然后尝试访问它——它会产生一个编译时错误。也就是说,如果您查看当前版本的代码:将int d = 0 修改为int d 不会产生这样的异常,因为d 在访问/返回之前已被分配。但同样,您是对的:在之前版本的代码中,d 用于if 条件,这会产生编译错误。谢谢指正!

标签: java substring


【解决方案1】:

另一种选择(假设您期望单个字符作为“数字”)是通过拉动char 并将其转换为int 来处理传递索引处的字符。

这可以通过Character class 中的getNumericValue(char ch) 方法完成。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2016-02-19
    • 2019-06-11
    相关资源
    最近更新 更多