2014-03-27 145 views
0

例如:如何檢查是否一個字符串的字符在另一個字符串

串1 =的HelloWorld 字符串2 = asdfuvjerhelloworld

本應返回true。

又如: 串1 =的HelloWorld 串2 = lshewodxzr

這也應該返回true。

所以我正在尋找如何使一個方法,將返回一個布爾值,將檢查,看看第二個字符串是否在第一個字符串中的字母。在第二個示例中,string2只有一次字母l,即使字符串l在string1中顯示了三次,並且它仍然返回true。同樣在第二個例子中,string2的字母不在string1中,但它仍然返回true。

任何關於如何編碼的幫助將非常感謝!

回答

0

sourceString.charArray()>Arrays.sort()>sourceString.contains(keyString) - 不是太有效率

更長String生成字符>發生映射爲源字符串,並通過密鑰字符串迭代,並檢查和處理Map

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),然後檢查第二個字符串是否具有該字符在裏面。
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 
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"); 
     } 
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()); 
} 

它獲得來自兩個字符串的不同字符的列表,然後檢查是否所有的第一個字符串的所有字符都包含在第二個字符串中。

相關問題