从 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”。
我有一个 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”。