【问题标题】:Java: find common characters in two stringsJava:查找两个字符串中的共同字符
【发布时间】:2017-03-24 00:02:00
【问题描述】:

我被要求编写一个程序,该程序使用 indexOf(char) 方法和 for 循环 查找两个字符串中的公共字符。这是我目前所拥有的 - 输出仍然是空白的。

import java.util.Scanner;
public class ClassName {
   public static void main (String args []) {

   Scanner input = new Scanner (System.in);

   String a = "";
   String b = "";
   String c = "";

   System.out.print("Enter two words: ")
   a = input.nextLine();
   b = input.nextLine();

   for (int i = 0; i < a; i++){

      char ch = a.charAt(i);
      if (b.indexOf(ch) != -1){
         c = c+String.valueOf(ch);
         }
      }
System.out.print("Common letters are: "+c);
}

}

output here

我不知道从这里去哪里。

谢谢

【问题讨论】:

  • Liam,你应该发布你所有的代码,这样我们就可以看到你是如何打印出文本的。此处的最佳做法是发布所有相关代码。
  • 是的,把你所有的代码。我试图在一个在线 Java IDE 中执行你上面的 sn-p 代码,它工作得非常好。我分别将 a 和 b 初始化为“table”和“cable”。我为 c 打印了“能够”。如果它对您不起作用,则可能是您初始化 a 和 b 的方式有问题。
  • 这类问题实际上并不需要问...如果您使用调试器单步调试您的代码,您会发现哪里出了问题。

标签: java for-loop char indexof charat


【解决方案1】:

您的代码将重复常见字符,例如,如果您将“developper”与“programmer”进行比较,您的结果字符串将包含 e 字符的三倍

如果您不希望这种行为,我建议您也使用这样的 Set:

public class CommonCharsFinder {

    static String findCommonChars(String a, String b) {
        StringBuilder resultBuilder = new StringBuilder();
        Set<Character> charsMap = new HashSet<Character>();
        for (int i = 0; i < a.length(); i++) {
            char ch = a.charAt(i); //a and b are the two words given by the user
             if (b.indexOf(ch) != -1){
                 charsMap.add(Character.valueOf(ch));
             }
        }

        Iterator<Character> charsIterator = charsMap.iterator();
        while(charsIterator.hasNext()) {
            resultBuilder.append(charsIterator.next().charValue());
        }
        return resultBuilder.toString();
    }
    // An illustration here
    public static void main(String[] args) {
       String s1 = "developper";
       String s2 = "programmer";

       String commons = findCommonChars(s1, s2);
       System.out.println(commons);     
    }

}

示例结果:

【讨论】:

  • 抱歉给大家带来了困惑,仍在学习使用这个网站(以及如何编码)。是的@alainlompo 这是问题的另一个要求 - 这似乎有效。谢谢!
  • @benny 不客气,继续关注堆栈溢出,这是学习和分享的好地方 :)
【解决方案2】:
public Set<Character> commonChars(String s1, String s2) {
    Set<Character> set = new HashSet<>();
    for(Character c : s1.toCharArray()) {
        if(s2.indexOf(c) >= 0) {
            set.add(c);
        }
    }
    return set;
}

【讨论】:

  • 仅仅发布一些代码并不是很有帮助。你能解释一下你的代码吗?这样其他人就可以理解并从您的答案中学习,而不仅仅是从网络上复制和粘贴一些代码。
【解决方案3】:
public class CommonCharFromTwoString {

    public static void main(String args[])
    {
       System.out.println("Enter Your String 1: ");
       Scanner sc = new Scanner(System.in);
       String str1 = sc.nextLine();
       System.out.println("Enter Your String 2: ");
       String str2 = sc.nextLine();

       Set<String> str = new HashSet<String>();
       for(int i=0;i<str1.length();i++){
           for (int j = 0; j < str2.length(); j++) {
              if(str1.charAt(i) == str2.charAt(j)){
                  str.add(str1.charAt(i)+"");
              }
        }
       }

        System.out.println(str);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多