【问题标题】:StringIndexOutOfBoundsException - Processing [duplicate]StringIndexOutOfBoundsException - 处理[重复]
【发布时间】:2017-11-19 22:35:59
【问题描述】:

我正在尝试构建一个函数,当给定一个字符串和一个起点时,它将返回分隔符 (', ') 之前的任何数字。所以如果它被交给("45,621,9", 0),它会返回45

这就是我所拥有的,它工作得很好,直到你碰到字符串的末尾,然后它抛出一个 StringIndexOutOfBoundsExceptionString index out of range: 8

因此,如果我尝试使用 ("45,621,9", 7),我会收到该错误。如何处理字符串的结尾并停止循环?我想过使用null 检查,但由于char 是原始的我不能。

final char delim = ',';
char dataStorage;

int nextItem (String data, int startFrom) {
  String dataValue = "";
  for (int i = startFrom; i < delim; i++) {
    dataStorage = data.charAt(startFrom);
    if (dataStorage != delim) {
      dataValue = dataValue + dataStorage;
      startFrom ++;
    }
  }
  startFrom++;
  return Integer.parseInt(dataValue);
}

现在,如果我调用 nextItem("45,621,9", 7),当它应该返回 9 然后停止循环时,我会得到那个异常。

【问题讨论】:

  • 你的循环条件真的没有意义:for (int i = startFrom; i &lt; delim; i++)i 不意味着成为字符串的索引。为什么要将它与要查找的分隔符的 Unicode 值进行比较?为什么你实际上不在循环体内使用i 的值?目前这是一个看起来很奇怪的循环。我怀疑您真的应该使用子字符串而不是字符串连接,并且您的循环应该使用for (int i = startFrom; i &lt; data.length(); i++) 作为初学者。
  • 请添加语言名称标签

标签: java string exception processing charat


【解决方案1】:

请参阅 Jon Skeet 的评论。您的 for 循环不正确。像下面这样更正它并尝试:-

for (int i = startFrom; i < data.length(); i++){
        dataStorage = data.charAt(i);
          if(dataStorage != delim){
              dataValue = dataValue + dataStorage;
              i++;
          }

【讨论】:

  • 请用java标签正确标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2021-04-22
  • 1970-01-01
  • 2020-08-08
相关资源
最近更新 更多