当前位置: 首页 > 知识库问答 >
问题:

Codingbat java String 2 plusOut-"字符串索引超出范围-1"

窦涵忍
2023-03-14

为了准备即将到来的计算机科学测验,我正在试着做关于codingbat的题“plusOut”,但我有一些错误。

这就是问题所在:http://codingbat.com/prob/p170829

这是我尝试使用的解决方案/代码:

String s = "";
for (int i = 0; i < str.length() - (word.length() - 1); i++) {
  if (str.substring(i, i + word.length()).equals(word)) {
    s += word;
  }
  else {
    s += "+";
  }
}
return s;

我得到的错误是"StringIndexOutOfBoundsExc0019"错误,表示"字符串索引超出范围:-1"

更新:我更改了我的代码,这样它就不会给我那个错误,但是现在每当主字符串中出现多个字符串时,它就不起作用了。

错误:http://imgur.com/dehX01C

共有1个答案

蓝苗宣
2023-03-14

代码的问题是,当您找到一个子字符串时,您会继续迭代作为子字符串一部分的字符串的字符。您需要跳过这些字符,并在子字符串末尾重新启动。

另一件事是codingbat只告诉你你的代码是否给出了正确的答案,但它不会告诉你它是写得好还是有效。你需要一个导师或一个好的论坛来做到这一点(也许codereview.stackexchange.com)。关于代码,我注意到的一点是,您正在循环中构建字符串。您应该为此使用StringBuilder。如果您使用的是IDE,您应该启用代码检查选项,这些选项会向您发出关于可疑做法的警告。您还可以使用命令行工具,如findbugs和check style。

这是我的版本:

StringBuilder sb = new StringBuilder(str.length());
for (int i = 0; i < str.length(); ) {
    if (i + word.length() <= str.length() &&
            str.substring(i, i + word.length()).equals(word)) {
        sb.append(word);
        i += word.length();
    }
    else {
        sb.append('+');
        i += 1;
    }
}
return sb.toString();

但是,以这种方式使用substring()不是很有效。您正在创建许多字符串对象,然后将它们丢弃,只是为了搜索字符串中出现的单词。最好使用字符串。indexOf(字符串str,int fromIndex)。以下是另一个版本(可能具有更高的性能):

char[] chars = str.toCharArray();
int i = 0;
int wordIndex = 0;
while ((wordIndex = str.indexOf(word, i)) != -1) {
    Arrays.fill(chars, i, wordIndex, '+');
    i = wordIndex + word.length();
}
Arrays.fill(chars, i, str.length(), '+');
return new String(chars);
 类似资料:
  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

  • 问题内容: 嗨,我编写了Java代码来查找由其他单词组成的最长单词。我的逻辑是从文本文件中读取单词列表,并将每个单词添加到一个数组中(在文本中,单词被排序,并且每行中只有一个单词)之后,我们检查数组中的每个元素是否具有其他元素作为子字符串。如果是这样,我们计算子字符串的数量。具有最大子串数的元素将是结果 当我给一个只有两个单词的文本文件时,代码正在运行。但是,当有两个以上的单词时,我将出现以下错误

  • 问题内容: 我猜我正在收到此错误,因为字符串正在尝试对值进行子字符串化。但是那部分不能消除这个问题吗? 这是Java代码段: 我收到此错误: 问题答案: 我猜我正在收到此错误,因为字符串试图将Null值作为子字符串。但是“ .length()> 0”部分不能消除该问题吗? 不,在itemdescription为null时调用itemdescription.length()不会生成StringInd

  • 问题内容: 我正在编写一个打开文本文件并检查注释的程序。然后,它解析注释以检查某些单词。 错误im出现在以下while循环中,该循环检查是否当前行以空格或除’/’以外的其他字符开头,如果那里存在非反斜杠字符,则while循环移至下一行并检查再次。一旦while循环满足其要求并中断程序崩溃,我将收到以下输出错误。 这是有问题的代码示例 谢谢你的帮助。我确定这是一个简单的错误,但我只是看不到它。 问题

  • 问题内容: 从类中调用函数时出现以下错误:java.lang.StringIndexOutOfBoundsException:超出范围的字符串索引:-1尽管我使用系统打印来查看输入的内容,但仍在substring()函数中进行传递似乎是正确的。函数isContained()返回一个布尔值,该值定义作为参数传递的子字符串是否在单词列表中。我的代码是: 其中size是我在函数中传递的字符串(str)的

  • 问题内容: 我写了这个小函数只是为了练习,但是抛出了一个异常(“字符串索引超出范围:29”),我不知道为什么… (我知道这不是编写此函数的最佳方法,可以使用正则表达式。) 这是代码: 问题答案: 您是否正在从其他语言翻译此代码?您要遍历字符串,直到到达空字符(),但Java通常不会在字符串中使用这些字符。在C语言中,这可以工作,但是在您的情况下,您应该尝试 代替 此外, 如果您期望的是,在代码末尾

  • 问题内容: 我目前正在从一本名为《 Python绝对入门》(第三版)的书中学习python。书中有一个练习,概述了一个子手游戏的代码。我遵循了这段代码,但是我在程序的中间不断返回错误。 这是导致问题的代码: 这也是它返回的错误: 有人可以帮助我解决出现的问题以及如何解决该问题吗? 编辑:我像这样初始化so_far变量: 问题答案: 您好像缩进得太多了。尝试这个:

  • 我正在编写一个打开文本文件并检查注释的程序。然后它解析注释以检查某些单词。 im出现的错误是以下while循环检查当前行是否以空白或“/”以外的任何字符开头(如果存在非反斜杠字符),然后while循环移到下一行并再次检查。一旦while循环满足其要求并爆发,程序就会崩溃,我会得到以下输出错误。 下面是有问题的代码示例 谢谢你的帮助。我肯定这是一个简单的错误,但我就是没看到。