Java String包含“splitted”String

时间:2014-07-30 14:44:54

标签: java string split char contain

检查Java字符串A是否包含另一个字符串B的最佳方法是哪种,即使B字符不是连续的?

例如:" takaderoka"包含" tkdr"但不是" tkkr"。

是否有内置功能,还是我必须自己编写? 谢谢。

6 个答案:

答案 0 :(得分:1)

没有内置功能,但可以在一行上完成:

"takaderoka".matches("tkkr".replace("", ".*"));

或者把它放在一个函数中:

static boolean matcher(String one, String two) {
    return one.matches(two.replace("", ".*"));
}

答案 1 :(得分:1)

一个简单的java程序,可以用作实用程序方法。 [也会考虑订单。]

public static boolean isMatched(String s1, String s2) {
    int index = -1;
    for (char ch : s2.toCharArray()) {
        if ((index = s1.indexOf(ch, index + 1)) == -1) {
            return false;
        }
    }
    return true;
}

...
System.out.println(isMatched("takaderoka", "tkdr")); // true
System.out.println(isMatched("takaderoka", "tkkr")); // false

您可以将其设为优化

public static boolean isMatched(String s1, String s2) {
    if ((s1.length() > 0 && s2.length() == 0) || (s2.length() > s1.length())) {
        return false;
    } else if (s1.indexOf(s2) != -1 || s1.equals(s2)) {
        return true;
    } else {
        int index = -1;
        for (char ch : s2.toCharArray()) {
            if ((index = s1.indexOf(ch, index + 1)) == -1) {
                return false;
            }
        }
    }
    return true;
}

答案 2 :(得分:0)

您可以使用"。*"在搜索字符串上进行正则表达式匹配。在每个角色之间插入,或者依次编写自己的搜索每个角色。

答案 3 :(得分:0)

您可以使用String类的contains()方法。查看String类的方法以及Java中的Regex表达式。

答案 4 :(得分:0)

我使用apache commons StringUtils。getLevenshteinDistance()函数。

基本上,它衡量您需要进行多少修改才能将一个字符串转换为另一个字符串。所以你的问题与知道将所有其他字母转换为空值是否与它们的长度之间的差异相同是完全相同的。

例如

StringUtils.getLevenshteinDistance("takaderoka","tkdr"); //6,   
StringUtils.getLevenshteinDistance("takaderoka","tkkr"); //7, 

如果结果=" takaderoka" .length - " tkdr" .length = 6,那么" takaderoka"包含" tkdr"

答案 5 :(得分:0)

你可以这种方法。可以重构以获得更好的代码。

 private boolean contains(String source, String toMatch) {
    boolean result = false;
    if (toMatch.length() == 0 || source.length() == 0) {
        return result;
    }
    int j = 0;
    for (int i = 0; i < source.length(); i++) {
        if (toMatch.length() - j > source.length() - i) {
            break;
        }
        if (source.charAt(i) == toMatch.charAt(j)) {
            j++;
        }
        if (j == toMatch.length()) {
            result = true;
            break;
        }
    }

    return result;
}