如何检查一个字符串的字符是否在另一个字符串中

时间:2014-03-27 18:34:43

标签: java string

例如:

string 1 = helloworld string 2 = asdfuvjerhelloworld

这应该返回true。

另一个例子: string 1 = helloworld string 2 = lshewodxzr

这也应该返回true。

所以我正在研究如何创建一个返回布尔值的方法,该方法将检查第二个字符串是否包含第一个字符串中的字母。在第二个例子中,string2只有字母l一次,即使字母l在string1中显示三次,它仍然返回true。同样在第二个例子中,string2的字母在string1中没有,但它仍然返回true。

非常感谢任何有关如何编码的帮助!

5 个答案:

答案 0 :(得分:5)

相信这个解决方案是正确的。如果我已正确理解您的要求。

这是使用Java 8.

public static void main(String[] args) {
    String a = "helloworld";
    String b = "lshewodxzr";

    containsAllChars(a, b);
    containsAllChars(b, a);
}

private static void containsAllChars(String a, String b) {
    boolean result = a.chars().distinct().allMatch(ch -> b.contains(String.valueOf((char) ch)));
    System.out.println(result);
}

输出:

true
false

答案 1 :(得分:3)

使用Java 8我会这样做:

public boolean check(final String firstString, final String secondString) {
    //Create a map mapping all characters from the firstString to true/false
    Map<Character, Boolean> map = IntStream.rangeClosed('a', 'z')
            .boxed()
            .collect(Collectors.toMap(
                    i -> (char)(int)i,
                    i -> firstString.chars().anyMatch(j -> j == i)
            ));

    return map.entrySet().stream()
            .filter(entry -> entry.getValue() == true)
            .map(Map.Entry::getKey)
            .allMatch(ch -> secondString.chars().anyMatch(i -> i == ch));
}

<强>解释

  • 首先,您为所有字符Map<Character, Boolean>创建az,映射它是否出现在第一个字符串中。
  • 然后它从该映射获取流,只查看第一个字符串中的字符,将流映射到字符流,即使它是IntStream,然后检查是否为第二个string中包含该字符。

答案 2 :(得分:2)

我实际上找到了一种更简单的方法,但留下我的旧答案以供参考。这也应该是最有效的方式,它仍然使用Java 8:

public boolean containsAllChars(String a, String b) {
    List<Character> aChars = stringToCharacterList(a);
    List<Character> bChars = stringToCharacterList(b);
    return bChars.containsAll(aChars);
}

public List<Character> stringToCharacterList(String input) {
    return input.chars().distinct()
            .mapToObj(i -> (char)i)
            .collect(Collectors.toList());
}

它从两个字符串中获取不同字符的列表,然后检查第一个字符串的所有字符是否都包含在第二个字符串中。

答案 3 :(得分:0)

sourceString.charArray()&gt; Arrays.sort()&gt; sourceString.contains(keyString) - 效率不高

更长的String生成字符&gt; source String的发生映射并迭代键String并检查并处理Map

答案 4 :(得分:0)

String s1 = "helloworld";
        String s2 = "lshewodxzr";
        boolean flag=false;
        for(int i=0;i<s1.length();i++){
            for(int j=0;j<s2.length();j++){
                if(s1.charAt(j) != s2.charAt(j)){
                    flag=false;
                }
                else{
                    flag=true;
                    break;
                }
            }
        }
        if(flag){
            System.out.println("s2 has all characters of s1");
        }
        else{
            System.out.println("s2 doesn't have all characters of s1");
        }