从java中的String中删除重复项

时间:2016-10-31 11:04:08

标签: java string duplicates

从java中给出的字符串中删除重复项 例如: - 如果我的字符串是“cutcopypaste”
 然后输出应该是“uoyase”

输入: - cutcopypaste;
输出: - uoyase;
这是我编写的程序。我应该做些什么改变? 但我的输出是这样的:-cuttcoppyppastte

class Remove {
 public static String remo(String st) {
  char[] ch = st.toCharArray();
  st = "";
  String st1 = "";
  for (int i = 0; i < ch.length; i++) {
   for (int j = 1; j < ch.length; j++) {
    if (ch[i] == ch[j]) {
     st1 = st1 + ch[i];
    } else {
     st = st + ch[i];
    }
   }
  }
  return st;
 }
 public static void main(String[] args) {
  String st1 = "cutcopypaste";
  st1 = remo(st1);
 }
}

3 个答案:

答案 0 :(得分:0)

您可以使用此方法将字符串转换为字符数组,如.toCharArray()。

然后将char数组转换为一个将删除重复项的集合。

public static Set convertToSet(char[] charArray) { 
// Result hashset 
Set resultSet = new HashSet(); 
for (int i = 0; i < charArray.length; i++) { 
resultSet.add(newCharacter(charArray[i])); 
} 
// Return result 
return resultSet; 
}

答案 1 :(得分:0)

如果订单对您无关紧要,那么您可以试试这段代码:

 List<Character> result = input
            .chars()
            .mapToObj(el -> (char) el)
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
            .entrySet()
            .stream()
            .filter(el -> el.getValue() == 1L)
            .map(Map.Entry::getKey)
            .collect(Collectors.toList());

答案 2 :(得分:0)

我的方法是迭代char数组并记住每个char发生的频率。在这种情况下,我们可以使用包装器类型Boolean,它为每个字符提供3种可能的状态:null =尚未发生,true =确实发生过一次,false =确实发生了不止一次。

要保留这些状态,我会使用LinkedHashMap,因为它会保留广告订单。要获取结果字符串,我们只需迭代映射的条目,过滤掉所有没有状态true的东西(即发生一次)并连接到字符串。

public class Duplicate {

    public static void main(String[] args) {
        System.out.println(remo("cutcopypaste"));
    }

    public static String remo(String st) {

        Map<Character, Boolean> occurredOnlyOnce = new LinkedHashMap<>(); //preserves insertion order

        for(char c : st.toCharArray()) {
            Boolean occurred = occurredOnlyOnce.get(c);
            if(occurred == null) {
                occurredOnlyOnce.put(c, true);
            } else if(occurred) {
                occurredOnlyOnce.put(c, false);
            }
        }

        return occurredOnlyOnce.entrySet().stream()
            .filter(e -> e.getValue())
            .map(e -> e.getKey().toString())
            .collect(Collectors.joining());
    }

}