string去除重复字符两个方法
网上有很多伪方法,只删除了相邻重复字符串,大家警惕!
主要使用list.contains()检测重复。
一直在想本来应该怎样做,因为面试官说了句只用了一层循环,可能这样是比较通用的:
1、charAt遍历String每个字符(第一层循环)
2、charAt遍历StringBuffer每个字符,如果没有就加进去(第二层循环)
import java.util.*;
public class Main06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "kjkljklhuionsd";
System.out.println(sub(str));
System.out.println(sub1(str));
}
//方法1
static String sub(String str){
StringBuffer result = new StringBuffer();
List list = new ArrayList();
char[] cs = str.toCharArray();
for(int i=0; i<cs.length; i++){
if(!list.contains(cs[i])){
result.append(cs[i]);
list.add(cs[i]);
}
}
return result.toString();
}
//方法2
static String sub1(String str){
List list = new ArrayList();
StringBuffer sb = new StringBuffer(str);
int j=0;
for(int i=0; i<str.length(); i++){
if(list.contains(str.charAt(i))){
sb.deleteCharAt(i-j); //String 是没有delete方法的
j++; //因为删除了sb中的字符,有一个偏移
}else{
list.add(str.charAt(i));
}
}
return sb.toString();
}
}