Java 从两个字符串中获取两个常用词

Java 从两个字符串中获取两个常用词,java,string,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("(?!^)"))); 但是,它没有提供正确的结果。现

如何匹配字符串中的单词

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("(?!^)")));

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

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

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

这是一个常见的字符串问题,称为最长公共子序列。您可以找到有关该问题的更多信息 此外,如果您希望算法解决此问题,您可以在此处找到解决方案: 它是用不同的语言编写的,Java除外

如果您对这类算法感兴趣,此解决方案是动态规划算法的一个示例。希望这个答案对你有用

这也是一个更清晰、更直截了当的解决方案

希望这有助于:

    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);

你到底想干什么?你的例子不清楚。我认为您的意思是查找两个字符串的最长或所有公共子字符串,但bcda不是bcdaa和bcdca的一部分。请澄清或纠正这一点。如果您试图匹配全部,那么第一个示例的正确结果不是:{b,c,d,a,bc,bcd,cd}?了解如何定义正确的结果将非常有帮助。@TylerAndFriends使用诸如ebcda,bcda之类的常用词,对于第一次输入和iama,iama或使其成为一个anagram是很常见的。
    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);