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

字符串索引超出范围…我找不到问题,所以程序运行

狄冠宇
2023-03-14
Give a string: apple and apple
Longest substring: again
Longest substring size: 5

我找不到问题在哪里,如果我的代码是错误的。程序希望我们找到一个重复两次的字符串

package as;
import java.util.Scanner;

public class askisii {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        String stA,stB = null;
        int i,count=0,j,p1,p2;
        System.out.println("Give a string:");
        stA=scan.nextLine();
        
        for(i=0;i<stA.length()-1;i++) {
            for( j=i+1;j<stA.length()-1;j++) {

                if((stA.charAt(i)==stA.charAt(j)) && (stA.charAt(i+1)==stA.charAt(j+1))) {
                    stB+=stA.charAt(i);
                    p1=i;
                    p2=j;
                    
                    while(stA.charAt(p1+1)==stA.charAt(p2+1)) {
                        stB+=stA.charAt(p1+1);
                        p1++;
                        p2++;
                        count++;
                    }
                    
                    i=stA.length();
                    j=stA.length();
                }
            }
        }
        
        System.out.println("Longest substring:" + stB);
        System.out.println("Longest substring size:" + count);
        scan.close();
    }

}

共有1个答案

通典
2023-03-14

在while循环中,您没有检查索引是否做得太远。while循环一直运行到字符串的末尾,当没有任何字符可以抓取时,仍然试图抓取更多的字符。

将while循环切换为如下所示。我想它会解决这个问题。

而(p1+1

 类似资料:
  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 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语言中,这可以工作,但是在您的情况下,您应该尝试 代替 此外, 如果您期望的是,在代码末尾