例如:
string 1 = helloworld string 2 = asdfuvjerhelloworld
这应该返回true。
另一个例子: string 1 = helloworld string 2 = lshewodxzr
这也应该返回true。
所以我正在研究如何创建一个返回布尔值的方法,该方法将检查第二个字符串是否包含第一个字符串中的字母。在第二个例子中,string2只有字母l一次,即使字母l在string1中显示三次,它仍然返回true。同样在第二个例子中,string2的字母在string1中没有,但它仍然返回true。
非常感谢任何有关如何编码的帮助!
答案 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>
创建a
到z
,映射它是否出现在第一个字符串中。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");
}