我正在编写一个使用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而没有同步开销)