【问题标题】:find all non repeated character in a string查找字符串中所有不重复的字符
【发布时间】:2015-07-22 12:43:25
【问题描述】:

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

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

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

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+" ");
      }
    }
}

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

【问题讨论】:

  • 现在你没有删除任何字母,这是你要问的,如何删除字符?
  • 实际上他们在输入两个字符串时没有标点符号,因为它会要求您输入第二个单词之后的第一个单词
  • 在您输入时的代码中:
  • 爱和生命这个词会输出el

标签: java arrays string character


【解决方案1】:
for(Character ch:keys){
  if(map.get(ch) == 1){
    System.out.println(ch+" ");
  }
}

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

【讨论】:

  • 如果我只想打印不在第二个变量上的第一个变量的元素。
  • 示例:字符串是“glass”和“bass”,输出将是“gl”
【解决方案2】:

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])));
}

操作Sets 很简单:

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);
}

【讨论】:

  • 如果我只想打印不在第二个变量上的第一个变量的元素怎么办。示例:字符串是“glass”和“bass”,输出将是“gl”
猜你喜欢
  • 2012-04-20
  • 2012-11-30
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 2014-10-31
相关资源
最近更新 更多