benny benny - 24 days ago 16
Java Question

Java: find common characters in two strings

I'm asked to write a program that finds the common characters in two strings using the indexOf(char) method and a for loop. Here's what I have so far - the output comes out blank still.

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

I'm not sure where to go from here.

thanks

Answer

Your code will duplicate common characters for example if you compare "developper" to "programmer" your result string will contain three time the e character

If you don't want that behaviour I suggest that you also use a Set like this:

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

}

Result from the example:

enter image description here

Comments