如何匹配字符串
中的单词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("(?!^)")));
但是,它没有提供正确的结果。现在,我怎样才能做到这一点?
答案 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);