java -检查一个字符串是否包含另一个字符串的所有字符,但顺序不同

2ledvvac  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(231)

我需要一个方法,采取字符串的所有字符,并检查这些字符是否在另一个字符串。
我的方法:

public boolean isItemUsable2(String word1, String word2) {
        int count = 0;
        for (int i = 0; i < word2.length(); i++) {
            String itemPiece = Character.toString(word2.charAt(i));
            if (word1.contains(itemPiece)) {
                count++;
            }
        }
        return count == word2.length();
    }

问题是,例如单词1是“12345++”,单词2是“155”,它应该说它是假的,因为只有一个5,但它显示为真,我不知道如何修复它。

y4ekin9u

y4ekin9u1#

您可以通过使用搜索词的字符列表来解决此问题。尝试从列表中删除每个测试字符。如果成功删除,则说明word1包含该字符,同时防止再次检查该字符。

public static boolean isItemUsable2(String word1, String word2)
{
    final List<Character> word1Chars = new ArrayList<>();
    for (char aChar : word1.toCharArray())
        word1Chars.add(aChar);
    boolean usable = !word2.isEmpty();
    for (int i = 0; i < word2.length() && usable; i++)
    {
        usable = word1Chars.remove((Character) word2.charAt(i));
    }
    return usable;
}
wz1wpwve

wz1wpwve2#

我会使用regex。这不是最有效的方法,但它会工作

public static boolean isItemUsable2(String a, String b) {
    Map<Character, Integer> map = new HashMap<>();
    for (char c : b.toCharArray()) {
        map.merge(c, 1, (k,v) -> v + 1);
    }

    for (Entry<Character, Integer> entry : map.entrySet()) {
        Pattern pattern = Pattern.compile(Pattern.quote(entry.getKey().toString()) + "{" + entry.getValue() + "}");
        if (!pattern.matcher(a).find()) {
            return false;
        }
    }
    return true;
}

相关问题