java - 删除相邻重复字母时的 StringIndexOutOfBounds

标签 java string recursion

这是我的代码:

 public static String removeAdjDuplicates(String s) {
     if(s == "" || s == null || s.isEmpty())
         return s;

     if(s.length() < 2) 
         return s;

     if(s.charAt(0) != s.charAt(1))
          s = s.charAt(0) + removeAdjDuplicates(s.substring(1));

     if(s.charAt(0) == s.charAt(1)) //line 37
         return removeAdjDuplicates(s.substring(2));

     return s;
 }

输入字符串“ull”时,出现以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
    at java.lang.String.charAt(String.java:658)
    at GFG.removeAdjDuplicates(File.java:37)
    at GFG.main(File.java:16)

我阅读并尝试了类似问题的答案,但我不确定出了什么问题。

最佳答案

从您收到的异常来看,removeAdjDuplicates 返回一个空字符串,使所有超过零的索引无效。

尽管您的代码在顶部执行长度检查,但当两个初始字符不同时,它也会执行此分配:

s = s.charAt(0) + removeAdjDuplicates(s.substring(1));

这意味着,如果 removeAdjDuplicates 返回空字符串,则 s 可以变成单字符字符串。

关于java - 删除相邻重复字母时的 StringIndexOutOfBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477037/

相关文章:

powershell - 在 Powershell 中列出等于或低于给定深度的文件夹

Java:是否可以关闭包(限制向其中添加类)

python - 打印 Python Dataframe 的选项卡分隔行

C++ 将字符串(或 char*)转换为 wstring(或 wchar_t*)

recursion - 在DOS中递归复制匹配通配符组合但不创建目录树的文件

javascript - promise 与递归

java - 读取文件时如何跳过某些文本区域?

java - 打印数组显示错误的输出

java - 从数组列表对象中获取产品名称

javascript - 在 URL 查询字符串之间调用 JavaScript 函数