Java 使用StringBuffer删除DUP的方法
我正在编写一个使用StringBuffer从字符串中删除DUP的方法。该方法正在返回StringIndexOutOfBoundsException。我怎样才能修好它Java 使用StringBuffer删除DUP的方法,java,string,stringbuffer,Java,String,Stringbuffer,我正在编写一个使用StringBuffer从字符串中删除DUP的方法。该方法正在返回StringIndexOutOfBoundsException。我怎样才能修好它 public static void removeDups( String myString ){ StringBuffer sb = new StringBuffer( myString ); int len = myString.length(); for ( int j
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() );
}
publicstaticvoidremovedups(stringmystring){
StringBuffer sb=新的StringBuffer(myString);
int len=myString.length();
对于(int j=0;jj;k--){
如果(b.字符(k)=c){
某人(k);
蓝--;
}
}
}
System.out.println(“删除DUP后:+sb.toString());
}
如果您试图向下迭代,则它必须是k--
,而不是k++
。现在,第二次迭代将有k=len
,这超出了范围。你正在无限地向上更新,而不是向下更新
您还缺少一个括号:它需要
if ( sb.charAt(k) == c ) {
sb.deleteCharAt(k);
len--;
}
(在我们进行此项工作时,基本上没有理由使用StringBuffer
而不是StringBuilder
,后者提供了~相同的API而没有同步开销。)
如果您试图向下迭代,则它必须是k--
,而不是k++
。现在,第二次迭代将有k=len
,这超出了范围。你正在无限地向上更新,而不是向下更新
您还缺少一个括号:它需要
if ( sb.charAt(k) == c ) {
sb.deleteCharAt(k);
len--;
}
(在我们进行此项工作时,基本上没有理由使用StringBuffer
而不是StringBuilder
,后者提供了~相同的API而没有同步开销。)
如果您试图向下迭代,则它必须是k--
,而不是k++
。现在,第二次迭代将有k=len
,这超出了范围。你正在无限地向上更新,而不是向下更新
您还缺少一个括号:它需要
if ( sb.charAt(k) == c ) {
sb.deleteCharAt(k);
len--;
}
(在我们进行此项工作时,基本上没有理由使用StringBuffer
而不是StringBuilder
,后者提供了~相同的API而没有同步开销。)
如果您试图向下迭代,则它必须是k--
,而不是k++
。现在,第二次迭代将有k=len
,这超出了范围。你正在无限地向上更新,而不是向下更新
您还缺少一个括号:它需要
if ( sb.charAt(k) == c ) {
sb.deleteCharAt(k);
len--;
}
(当我们进行调试时,基本上没有理由使用
StringBuffer
而不是StringBuilder
,后者提供了~相同的API,没有同步开销。)您尝试过调试吗?从技术上讲,它不会返回StringIndexOutOfBoundsException
,而是抛出它。供将来参考。您是否尝试过调试?从技术上讲,它不会返回StringIndexOutOfBoundsException
而是抛出它。供将来参考。您是否尝试过调试?从技术上讲,它不会返回StringIndexOutOfBoundsException
而是抛出它。供将来参考。您是否尝试过调试?从技术上讲,它不会返回StringIndexOutOfBoundsException
而是抛出它。供将来参考。是的,没错。我更改了它,但是,该方法仍然删除了一个重复。比如说,当我把“njznj”放进去时,它会打印“njzj”。谢谢你提到这个括号。我还编写了一些Python,并认为它将包括两行,没有括号。现在,程序很好,感谢您的努力。而且“当我们正在进行时”,从StringBuilder中重复删除字符(或短子字符串)几乎总是比复制应该保留的部分慢得多,因为delete必须在删除点之后移动所有文本。是的,这是正确的。我更改了它,但是,该方法仍然删除了一个重复。比如说,当我把“njznj”放进去时,它会打印“njzj”。谢谢你提到这个括号。我还编写了一些Python,并认为它将包括两行,没有括号。现在,程序很好,感谢您的努力。而且“当我们正在进行时”,从StringBuilder中重复删除字符(或短子字符串)几乎总是比复制应该保留的部分慢得多,因为delete必须在删除点之后移动所有文本。是的,这是正确的。我更改了它,但是,该方法仍然删除了一个重复。比如说,当我把“njznj”放进去时,它会打印“njzj”。谢谢你提到这个括号。我还编写了一些Python,并认为它将包括两行,没有括号。现在,程序很好,感谢您的努力。而且“当我们正在进行时”,从StringBuilder中重复删除字符(或短子字符串)几乎总是比复制应该保留的部分慢得多,因为delete必须在删除点之后移动所有文本。是的,这是正确的。我更改了它,但是,该方法仍然删除了一个重复。比如说,当我把“njznj”放进去时,它会打印“njzj”。谢谢你提到这个括号。我还编写了一些Python,并认为它将包括两行,没有括号。现在,程序很好,感谢您的努力。而且“当我们正在进行时”,从StringBuilder中重复删除字符(或短子字符串)几乎总是比复制应该保留的部分慢得多,因为delete必须在删除点之后移动所有文本。