从两个字符串中得到两个常用词

时间:2014-02-17 16:44:13

标签: java string

如何匹配字符串

中的单词
input:
bcdaa
bcdca

output:
bcda

input:
iamaman
iamaboy

output:
iama

我通过这种方式比较了两个字符串

Set<String> set1= new HashSet<String>(Arrays.asList(s1.split("(?!^)")));
set1.retainAll(Arrays.asList(s2.split("(?!^)")));

但是,它没有提供正确的结果。现在,我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想比较字符串中的单词。为此,您可以使用空格将第一个字符串拆分为带有String.split()的正则表达式,然后使用String.contains()检查第二个字符串是否包含该单词。 像这样:

String[] temp = string1.split(" ");
for(string x : temp){
if(string2.contains(x))System.println(x);
}

答案 1 :(得分:0)

这是一个常见的字符串问题,称为最长公共子序列。您可以找到有关该问题的更多信息http://en.wikipedia.org/wiki/Longest_common_subsequence_problem 此外,如果您希望算法解决它,您可以在此处找到解决方案:http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_subsequence#Java 它用不同的语言编写,而不是Java。

如果您对此类算法感兴趣,此解决方案是动态编程算法的示例。希望你觉得这个答案很有用。

这也是来自http://rosettacode.org/wiki/Longest_common_subsequence

的更清晰,更直接的解决方案
public static String lcs(String a, String b) {
int[][] lengths = new int[a.length()+1][b.length()+1];

// row 0 and column 0 are initialized to 0 already

for (int i = 0; i < a.length(); i++)
    for (int j = 0; j < b.length(); j++)
        if (a.charAt(i) == b.charAt(j))
            lengths[i+1][j+1] = lengths[i][j] + 1;
        else
            lengths[i+1][j+1] =
                Math.max(lengths[i+1][j], lengths[i][j+1]);

// read the substring out from the matrix
StringBuffer sb = new StringBuffer();
for (int x = a.length(), y = b.length();
     x != 0 && y != 0; ) {
    if (lengths[x][y] == lengths[x-1][y])
        x--;
    else if (lengths[x][y] == lengths[x][y-1])
        y--;
    else {
        assert a.charAt(x-1) == b.charAt(y-1);
        sb.append(a.charAt(x-1));
        x--;
        y--;
    }
}

return sb.reverse().toString();
}

答案 2 :(得分:0)

希望这会有所帮助:

    String str1 = "bcdaa";
    String str2 = "bcdca";
    String strbuilder = "";

    char[] first = str1.toLowerCase().toCharArray();
    char[] second = str2.toLowerCase().toCharArray();

    int minLength = Math.min(first.length, second.length);

    for (int i = 0; i < minLength; i++) {
        if (first[i] == second[i]) {
            strbuilder += String.valueOf(first[i]);

        }
    }
    System.out.println(strbuilder);