【问题标题】:Substring function not yielding desired result子字符串函数没有产生预期的结果
【发布时间】:2014-12-30 20:39:15
【问题描述】:

我目前正在开发以下程序,试图将DoubleArrayList 更改为String,然后显示String Array 的每个元素的substring(3,11)

请看以下内容:

    ArrayList<Double> nums = new ArrayList<Double>();
    ArrayList<String> strs = new ArrayList<String>();

    for (double i = 1; i < 1000; i++) {
        nums.add(1/i);
}

    for (Double double1 : nums) {

        BigDecimal bd = new BigDecimal(double1);
        strs.add(bd.toString());
    }

    for (String string : strs) {

        System.out.println(string.substring(3,11);
    }

但问题是每次我运行这个程序时,我都会得到以下信息:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 11
    at java.lang.String.substring(Unknown Source)
    at AnotherTestClass.main(AnotherTestClass.java:28)

【问题讨论】:

  • 当您在调试器中检查名为string 的变量时,它的值是多少?
  • 你认为substring(3,11) 会做什么?
  • 问题是一些字符串的长度不是 11+。您究竟想在这里完成什么,我们也许可以帮助您找到更好的解决方案。
  • substring 正在按预期工作。首先阅读文档以了解其行为方式。程序员不会白白写文档。
  • 大家好,感谢您的帮助! David Coler 的建议帮助我解决了这个问题。我知道这是我的代码错误,而不是子字符串函数本身。使用 string.length()-1 作为 EndIndex 有很大帮助。谢谢!

标签: java substring


【解决方案1】:

问题在于 - System.out.println(string.substring(3,11));

变量字符串的长度在您的代码中的任何点都不超过 3

for (double i = 1; i < 1000; i++) {
  nums.add(1/i);
}

System.out.println(string.substring(3,11)) 失败。尝试打印字符串值来理解

for (String string : strs) {
    System.out.println(string);
    System.out.println(string.substring(3,11);
}

【讨论】:

  • 您好,感谢您的帮助。当我运行您建议的代码时,我得到与以前相同的错误。但是,如果我拿出的System.out.println(string.substring(3,11))和离开的System.out.println(串),我得到的是阵列中的所有字符串输出:1 0.5 0.333333333333333314829616256247390992939472198486328125 0.25 0.200000000000000011102230246251565404236316680908203125 0.1666666666666666574148081281236954964697360992431640625 0.142857142857142849212692681248881854116916656494140625 0.125 0.111111111111111104943205418749130330979824066162109375 ....................
  • System.out 不是调试器。
【解决方案2】:
string.substring(3,11);  

您尝试子串的字符串没有那么长。更改您决定子字符串变量的方式。即

if(string.length > 3)
    string.substring(3, (string.length -1));

【讨论】:

  • 最后一个索引是排他的,所以要包括绝对最后一个字符,它的边界是[3, string.length)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 2011-12-24
  • 1970-01-01
  • 2015-04-20
  • 2019-12-13
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多