首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除相邻重复字母时的StringIndexOutOfBounds

删除相邻重复字母时的StringIndexOutOfBounds
EN

Stack Overflow用户
提问于 2017-01-05 03:49:20
回答 4查看 77关注 0票数 0

这是我的代码:

代码语言:javascript
复制
 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",我得到以下错误:

代码语言:javascript
复制
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)

我阅读并尝试回答类似的问题,但我不知道哪里出了问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-05 04:38:06

当您尝试将这个字符串"ull"传递给该方法时,字符串中的最后一个字母应该是字母"u“,因为您使用了以下命令

代码语言:javascript
复制
if(s.charAt(0) != s.charAt(1))
          s = s.charAt(0) + removeAdjDuplicates(s.substring(1));

由于不像方法中的其他条件那样返回字符串,它将继续到第37行的下一个条件,而u只有一个字母,而检查第一个和第二个字符的条件.没有第二个字母了,所以你得到了这个错误。因此,解决方案是像这样返回s

代码语言:javascript
复制
if(s.charAt(0) != s.charAt(1)){
          s = s.charAt(0) + removeAdjDuplicates(s.substring(1));
         return s;
     }
票数 1
EN

Stack Overflow用户

发布于 2017-01-05 03:59:39

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

虽然代码在顶部执行长度检查,但当两个初始字符不同时,它也会执行此赋值:

代码语言:javascript
复制
s = s.charAt(0) + removeAdjDuplicates(s.substring(1));

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

票数 3
EN

Stack Overflow用户

发布于 2017-01-05 04:36:23

我认为@dasblinkenlight's answer充分解释了错误的来源。

虽然问题中没有明确说明,但似乎您试图递归地删除相邻的重复字母(其中一条注释提到您希望输出s用于输入geegs)。

以下是另一种方法:

代码语言:javascript
复制
    while(!s.equals(s = s.replaceAll("(.)\\1", "")));

它使用正则表达式来匹配和删除重复字符,while循环将一直执行此操作,直到字符串不再被操作修改为止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41477037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档