java - 运行计数非重复的子str操作时获取arrayindexoutofboundsexception

标签 java error-handling

我在下面的代码下运行时得到ArrayIndexOutOfBoundsException。我正在尝试计算字符串中非重复子字符串值的总数。我添加了try catch来停止此异常。通常我会进入s2[j]=s2[k];行。

public class SubStrLen2 {
    public static int StrLen1(String s) {
        int n = s.length();
        int count=0, flag=0;
        char[] s1 = s.toCharArray();
        char[] s2 = s1;
       // char[] s3;
        for(int i=0; i<=n;i++)
        {
                for(int j =0;j<i; j++)
                {
                    if(s1[i] == s2[j])
                    {
                        if(i!=j) {
                        flag = 1;
                        for(int k=j+1;k<=n;k++,j++)
                        {
                            s2[j]=s2[k];
                        }
                        break;
                        }
                    }
                }
                if(flag==0)
                {
                    //s3[i]=s1[i];
                    count ++;
                }
                flag =0;        
                }
        return count;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String sc = "GreekGods";
        try {
        System.out.println("Length of the Sub str"+ StrLen1(sc));
        }catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("Error in Array");
        }

    }
}

最佳答案

有很多观察,以0开头的循环索引应以总长度-1 结束,因此,如果n是您的Array长度,则代码应为

  for(int i=0; i<n;i++)

同样的问题在
for(int k=j+1;k<=n;k++,j++)

在这里,您不仅在使用 = 符号,这将导致ArrayIndexOutOfBoundsException,而且您还在递增j ,除非有意为之,否则它是父循环的一部分,您可能无法获得预期的结果。

关于java - 运行计数非重复的子str操作时获取arrayindexoutofboundsexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58723256/

相关文章:

javascript - 如何使用 express.Router 实例进行错误处理

java - 使用 Java 比较目录 : how could I recognize deleted files?

java - 无法使用 Java API 将本地 csv 文件上传到 BigQuery

Python:为每个引发的异常做一些事情

c# - ASP.NET MVC 如何在不重写 URL 的情况下处理 Application_Error 的 404 错误

asp.net - 集中式 ASP.NET 错误处理 : <customErrors> vs. Application_Error。可以同时使用吗?

Java PreparedStatement Cross-DB with casting

java - ListView onScroll 被多次调用

java - 反转列表但一次

c++ - 也许我误解了 C++ 异常?