方法使用StringBuffer删除dup



我正在编写一个使用StringBuffer从字符串中删除dup的方法。该方法返回StringIndexOutOfBoundsException。我该怎么修理它?

public static void removeDups( String myString ){
        StringBuffer sb = new StringBuffer( myString );
        int len =  myString.length(); 
        for ( int j = 0; j < len; j++ ){
            char c = sb.charAt(j);
            for ( int k = len - 1 ; k > j ; k-- ){
                if ( sb.charAt(k) == c ){
                    sb.deleteCharAt(k);
                    len--; 
                }
            }
        }
        System.out.println("After deleting the dups : " + sb.toString() ); 
    } 
for (int k = len - 1 ; k > j ; k++ )

如果你尝试向下迭代,它需要是k--,而不是k++。现在,第二次迭代会有k = len,这是界外的。你是在无限向上更新,而不是向下更新到一个界限。

你还少了一个括号:它应该是

 if ( sb.charAt(k) == c ) {
    sb.deleteCharAt(k);
    len--; 
 }

(虽然我们在这里,实际上没有理由使用StringBuffer而不是StringBuilder,它提供了相同的API而没有同步开销)

最新更新