java:如何实现StringBuilder的replaceAll方法

java:如何实现StringBuilder的replaceAll方法,java,Java,我用matcher实现了replaceAll方法,它将所有标点替换为。但它总是抛出一个异常:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:6 如果要通过删除循环中的字符来更改StringBuilder,尤其是其长度,则需要获得一个新的匹配器,因为旧的匹配器将继续查看原始缓冲区或两者不一致的混合 .如果要通过删除循环中的字符来更改StringBuilder,尤其是其长度,则需要获得新的匹配器,因为旧的匹配器将继续查看原始缓冲区或两者的不一致

我用matcher实现了replaceAll方法,它将所有标点替换为。但它总是抛出一个异常:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:6


如果要通过删除循环中的字符来更改StringBuilder,尤其是其长度,则需要获得一个新的匹配器,因为旧的匹配器将继续查看原始缓冲区或两者不一致的混合


.

如果要通过删除循环中的字符来更改StringBuilder,尤其是其长度,则需要获得新的匹配器,因为旧的匹配器将继续查看原始缓冲区或两者的不一致混合


.

我想这就是我想要的

private static void filterPunctuation(StringBuilder sb)
{
    int l=sb.length();
    for (int i=0; i<l; i++) if (sb.charAt(i)=='.') sb.deleteCharAt(l--);
}

不需要返回它,因为您正在处理同一个引用。

我认为这就是解决问题的方法

private static void filterPunctuation(StringBuilder sb)
{
    int l=sb.length();
    for (int i=0; i<l; i++) if (sb.charAt(i)=='.') sb.deleteCharAt(l--);
}

在处理同一引用时,无需返回它。

为什么不在此处显示实现?为什么要这样做?为什么不直接使用API呢?或者这是作业,在这种情况下添加标签please@Bohemian:StringBuilder没有替代品,当然,我想通过字符串不会损失太多。因为我想过滤一些标点,我想这会花费太多的记忆。replaceall@remy:我假设string.replaceAll的实现相当有效。为什么不在这里显示您的实现?为什么要这样做?为什么不直接使用API呢?或者这是作业,在这种情况下添加标签please@Bohemian:StringBuilder没有替代品,当然,我想通过字符串不会损失太多。因为我想过滤一些标点,我想这会花费太多的记忆。replaceall@remy:我假设string.replaceAll的实现相当有效。+1我喜欢简单。您可能应该修改您的代码,以显示它如何处理逗号、括号等可能成为一个丑陋的链;到目前为止,remy的原始代码没有考虑它们,因此我省略了它们+1,我喜欢简单。您可能应该修改您的代码,以显示它如何处理逗号、括号等可能成为一个丑陋的链;到目前为止,remy的原始代码没有考虑它们,因此我省略了它们,这对我有帮助。现在我知道怎么做了,这对我有帮助。现在我知道怎么做了。