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

字符串索引超出范围:-1循环错误

贺英悟
2023-03-14
public boolean isFound(String first, String second) {
    StringBuilder sb1 = new StringBuilder(first);
    StringBuilder sb2 = new StringBuilder(second);

    first.toCharArray();
    second.toCharArray();
    for (int i = 0; i < first.length(); i++) {
        int k = (first.substring(i, i + 1)).indexOf(second, i);
        if (sb1.length() > 0) {
            sb1.deleteCharAt(k);
            sb2.deleteCharAt(k);
        }
    }
    if (sb1.length() == 0) {
        return true;
    } else {
        return false;
    }
}

例:“at”和“tack”应该返回true,“tree”和“ere”应该返回false。

在查看注释后编辑,我的新代码现在是这样的。它总是返回false,即使带有“tree”和“tree”。

   public boolean isFound(String first, String second){
   StringBuilder sb2 = new StringBuilder(second); 

   for(int i=0;i<first.length();i++){
   int k = sb2.indexOf(first,i);
   if (k==-1)
       return false;
   else sb2.deleteCharAt(k);
}
      return true;
}

共有1个答案

徐飞尘
2023-03-14

您的代码中有许多问题。

  • 您只需要一个StringBuilder版本,即第二个
  • TocharArray()的调用是多余的
  • 不应在第二个中搜索第一个的每个字符,而应在其可变版本SB2中搜索。
  • 您使用的indexof错误。应该在StringBuilder对象上调用此方法来搜索第一个参数,您已经将其交换了。

您可以使用的伪代码是

isSuperAnagram(String first, String second) {
    sb = StringBuilder(second)
    for all chars in first {
        k = search index of current char of first in sb
        if(k == -1) // char is not in sb
            return false
        else
            remove char at index k from sb
    }
    return true
}
 类似资料:
  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

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

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

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

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

  • 试图用Gradle编译一个Android项目,却出现了一个奇怪的错误。当我运行。尝试了清洁重建,新鲜克隆的repo,不同的分支,同事都能建立AOK。 寻找事物的想法来检查/试图解决这个问题。 *更新:恢复到Gradle 2.11和似乎已经解决了这个问题。* Groovy:2.4.4 Ant:Apache Ant(TM)版本1.9.6编译于2015年6月29日JVM:1.8.0_101(Oracle