java - 使用StringBuffer删除重复项的方法

标签 java string stringbuffer

我正在编写一种使用 StringBuffer 从字符串中删除重复项的方法。该方法返回 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,而无需同步开销。)

关于java - 使用StringBuffer删除重复项的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31794881/

相关文章:

java - 我的程序的哪一部分处于错误的循环中? java

java - 为什么我从 java 编译器得到不兼容的类型?

java - Mongodb java 驱动程序 3.12.1 中的 MongoDB java 连接

java - RCaller - setRscriptExecutable() 究竟应该指向什么?

jQuery SerializeArray() JSON 字符串

python - 将一列中的值替换为另一列的特定实例

ios - 将来自 parse.com 的数据保存在字符串中的问题

java - 如何使用 .equals() 方法比较两个 StringBuffer 对象?

java - 执行存储在字符串中的函数。 java

java - 创建粗体单元格边框线 JTable