字符串a中的java字母包含在字符串b中

时间:2014-09-12 09:46:57

标签: java string char contains

方法:

public static boolean contains(String a, String b) { }

输入:

System.out.println(contains("ABBA", "BARAB"));

输出:

true

我正在努力的是如果正确检查String a是否包含在String b中,如果有多个相同的char。

如果这是公共静态boolen包含(char a,String b){} 这将容易10倍。我如何计算b有2个或更多A和2个或更多B?

输入:

boolean c = contains("ABBA","AKROBAT");

输出:

c = false

3 个答案:

答案 0 :(得分:2)

你可以使用这种方法:

  • 注意a和b
  • 之间的长度差异
  • 对于...中的每个字母
    • 用空白
    • 替换两个字符串中所有出现的字母
    • 如果长度变化的差异返回false
  • 循环后,返回true

在代码中:

public static boolean contains(String a, String b) {
    int diff = a.length() - b.length();
    while (a.length() > 0) {
        b = b.replace(a.substring(0, 1), "");
        a = a.replace(a.substring(0, 1), "");
        if (diff != a.length() - b.length())
            return false;
    }
    return true;
}

不是特别有效,但很容易遵循。

答案 1 :(得分:1)

好的,现在我明白了你的意思,你可以这样走

public static boolean contains(String a, String b) {
    boolean status = true;
    Map<String,Integer> mapA=new HashMap<>();
    Map<String,Integer> mapB=new HashMap<>();
    for(char i:a.toCharArray()){
        Integer val=mapA.get(""+i);
        if(val!=null){
            mapA.put(""+i,val+1);
        } else {
            mapA.put(""+i,1);
        }
    }
    for(char i:b.toCharArray()){
        Integer val=mapB.get(""+i);
        if(val!=null){
            mapB.put(""+i,val+1);
        } else {
            mapB.put(""+i,1);
        }
    }

    for(Map.Entry<String,Integer> entry:mapA.entrySet()){
        if (mapB.get(entry.getKey()) == null || entry.getValue() > 
                                                 mapB.get(entry.getKey())) {
            status = false;
        }
    }
    return status;
}

现在它将检查字母和相同的出现次数。

例如1:

System.out.println(contains("ABBA", "BARAB"));

Out put:

true

例如2:

System.out.println(contains("ABBA","AKROBAT"));

Out put:

false

答案 2 :(得分:1)

遍历a字符串,从b中移除首次出现并检查b大小是否更改为1,如果是,则继续,如果不是然后返回false:

public static boolean contains(String a, String b) {
    String temp = b;
    for (int i = 0; i < a.length(); i++) {
        temp = temp.replaceFirst(Pattern.quote(a.substring(i, i + 1)), "");
        if (b.length() - temp.length() != i + 1) return false;
    }
    return true;
}