接受2个字符串并在其中显示常用字符

时间:2015-06-05 08:58:23

标签: java string

我使用下面的代码在两个字符串中查找常见字符。有时这段代码产生错误的结果,例如给出大于字符串长度的输出值。

for(int i = 0;i < num1.length();i++){
                for(int j =0;j < num2.length();j++){
                    if(num1.charAt(i) == num2.charAt(j)){
                        count++;
                    }
                }
            }

3 个答案:

答案 0 :(得分:8)

目前还不清楚你想要达到的目标。

由于在字符串中出现多次的字符,您的代码可能会产生大于字符串长度的结果。您可以获得最多num1.length()* num2.length()的结果。

如果您想获得两个字符串中具有相同字符的位置数,您可以在一个循环中使用相同的索引并使用#34; charAt&#34;调用两个字符串:

for(int i = 0; i < num1.length() && i < num2.length(); i++) {
    if(num1.charAt(i) == num2.charAt(i)){
        count++;
    }
}

如果您想获得两个字符串中出现的唯一字母数,请单独浏览两个字符串并将字母添加到集合中。然后相交两组。结果集中的元素数量是您的结果:

    Set<Character> characters1 = new TreeSet<Character>();
    for(int i = 0; i < num1.length(); i++) {
        characters1.add(num1.charAt(i));
    }

    Set<Character> characters2 = new TreeSet<Character>();
    for(int i = 0; i < num2.length(); i++) {
        characters2.add(num2.charAt(i));
    }

    characters1.retainAll(characters2);
    return characters1.size();

答案 1 :(得分:1)

您可以使用HashSet

尝试这样的操作
import java.util.HashSet;
import java.util.Set;

public class QuickTester {

    public static void main(String[] args) {

        String s1 = "happy";
        String s2 = "elephant";

        Set<Character> set1 = new HashSet<Character>();
        Set<Character> set2 = new HashSet<Character>();

        for(char c : s1.toCharArray()) {
            set1.add(c);
        }
        for(char c : s2.toCharArray()) {
            set2.add(c);
        }

        // Stores the intersection of set1 and set2 inside set1
        set1.retainAll(set2);

        for(char c : set1) {
            System.out.print(" " + c);
        }

        System.out.println("\nTotal number of common characters: "
            + set1.size());
    }
}

请参阅retainAll关于如何完成2组的交集。

输入字符串:

happy
elephant

<强>输出:

 p a h
Total number of common characters: 3

答案 2 :(得分:1)

使用org.apache.commons.lang.StringUtils计算这样的匹配

    String num1 = "Java";
    String num2 = "Guava";
    int count = 0;
    List<String> charsChecked = new ArrayList<>();

    for(int i = 0;i < num1.length();i++){
        String charToCheck = num1.substring(i, i+1);

        if (!charsChecked.contains(charToCheck)) {
            count += StringUtils.countMatches(num2, charToCheck);
            charsChecked.add(charToCheck);
        }
    }

    System.out.println(count);

这导致上例中的计数为3