找到字符串中的所有非重复字符

时间:2015-07-22 12:43:25

标签: java arrays string character

你可以帮我这个java程序吗? 我有一个两个字符串,我需要确定没有重复字母的字符是什么。 输入是: 热爱生活 输出将是: ovif

它将删除所有具有重复的字符。

这是我的代码,但它只打印并找到有重复的字母。

public static void main(String[] args) {
    Map<Character, Integer> map = new HashMap<Character, Integer>(); 

    input = new Scanner(System.in);
    String aw, bw;

    System.out.println("Input First Word: ");
    aw=input.next();
    System.out.println("Input Second Word: ");
    bw=input.next();
    String s = aw+bw;
    char[] chars = s.toCharArray();

    for(Character ch:chars){
      if(map.containsKey(ch)){
         map.put(ch, map.get(ch)+1);
      } else {
         map.put(ch, 1);
      }
    }

    Set<Character> keys = map.keySet();


    for(Character ch:keys){
      if(map.get(ch) > 1){
        System.out.println(ch+" ");
      }
    }
}

我想打印它在该程序中删除的字符。

2 个答案:

答案 0 :(得分:1)

for(Character ch:keys){
  if(map.get(ch) == 1){
    System.out.println(ch+" ");
  }
}

将打印出一次出现的所有字符。您将两个字符串中的每个字符都添加到地图中,因此只出现一次的字符将具有值1.

答案 1 :(得分:0)

Set非常适合查看历史记录。

public void test() {
    String s = "love life";
    Set<Character> unique = new HashSet<>();
    Set<Character> duplicate = new HashSet<>();
    for (char c : s.toCharArray()) {
        // Have we seen this one before already.
        if (!duplicate.contains(c)) {
            if (!unique.add(c)) {
                // It was already there.
                unique.remove(c);
                // Mark it as duplicate.
                duplicate.add(c);
            }

        }
    }
    System.out.println("Unique:" + Arrays.toString(unique.toArray(new Character[0])));
}

操纵Set很简单:

Set<Character> inString(String s) {
    Set<Character> in = new HashSet<>();
    for (char c : s.toCharArray()) {
        in.add(c);
    }
    return in;
}

public void test() {
    Set<Character> inFirst = inString("glass");
    Set<Character> inSecond = inString("bass");
    Set<Character> inFirstButNotInSecond = new HashSet<>(inFirst);
    inFirstButNotInSecond.removeAll(inSecond);
    System.out.println("In first but not in second:" + inFirstButNotInSecond);
}