2016-09-16 23 views
-1

我要刪除我的字符串重複字符使用deleteCharAt方法,但它給了我一個異常異常指數越界使用時deleteCharAt與StringBuilder的

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;} 

回答

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