将DeleteCharAt与StringBuilder一起使用时,异常索引超出界限

时间:2016-09-16 01:52:37

标签: scala

我想使用deleteCharAt方法删除字符串中的重复字符,但它给了我一个例外

def removeDuplicate(str: String): String={ 
   var sb = new StringBuilder(str);
  for(i <-0 until str.length ){
      for(z <- i+1 until str.length ){
        if(str(i)==str(z)){         
            sb.deleteCharAt(i);
        }
      }
  }
   return sb.toString;}

1 个答案:

答案 0 :(得分:2)

如错误所示,当i = str.length - 1z = str.length超出索引时。你的代码还有另一个问题,就是你在循环遍历字符串时从字符串中删除字符。这通常不是一个好习惯,因为每次删除一个字符时字符串长度都会改变,你需要跟踪它。另一种更直观的方法是构建一个新字符串,并仅添加未出现在新字符串中的字符:

def removeDuplicate(str: String):String = {
  var sb = ""
  for(i <- 0 until str.length) {
    if(! (sb contains str(i))) {
      sb += str(i)
    }}
  sb
}

scala> removeDuplicate("abbccssds")
res13: String = abcsd

scala> removeDuplicate("abbeedsff")
res14: String = abedsf

scala> removeDuplicate("abbeedsffgg")
res15: String = abedsfg