从 StringBuffer 中删除重复值

Removing duplicate values from StringBuffer

我有一个 StringBuffer,它包含重复值,如示例左侧显示的值,我想将其转换为右侧显示的值。两种情况如下图

{1,1,1,2,2,} to `{1,2}` 

{a,a,a,b,c,c,c,}{a,b,c}

另请注意StringBuffer的内容和大小是不固定的。我想通过字符串操作来解决这个问题。

String s = "1,1,1,2,2";
System.out.println(s.replaceAll("(.)\1+", ""));

好吧,这里有一个适用于 相邻的重复项的解决方案。虽然有点笨重...

//Deletes all extra occurrences of String x(which can just be a single character)
public static StringBuffer removeDuplicateOf(StringBuffer s, String x){
    while(s.indexOf(x) != s.lastIndexOf(x))
        s.deleteCharAt(s.lastIndexOf(x));
    return s;
}

请注意,如果您不知道哪些项目是重复的,则必须对 StringBuffer 中的每个项目调用此方法。 (好吧,您的 StringBuffer 中每个 unique 项目一次。)

例如你可以这样做:

StringBuffer s = new StringBuffer("1,2,4,8,16,1,2,4,6,8,10,12,14,16,");
s.removeDuplicateOf(s, "1,");

这将避免从“16”、“10”等中删除“1”,同时仍然删除其他出现的“1”。