日期:2014-05-20  浏览次数:20720 次

JAVA字符串比较问题
str   a= "abcdefg "
str   b= "babcefg "
两字符串相同的字符串有 "a " "b "c "e "f "g "   "ab "   "bc "   "ef " "fg "
如何用JAVA写程序求出两字符串中所有相同的字符串

------解决方案--------------------
/**
*
*/
package test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

/**
* @author Daniel Cao
* @date 2007-8-9
* @time 上午11:23:22
*
*/
public class StringPattern {
/**
* *
*
* @param args
*/
public static void main(String[] args) {
getMaxPattern( "abcdefg ", "babcefg ");
}

public static void getMaxPattern(String strA, String strB) {
// 只要有一个null,就返回null
if (strA == null || strB == null || strA.trim().equals( " ")
|| strB.trim().equals( " ")) {
System.out.println( " ");
return;
}
int lengthA = strA.length();
int lengthB = strB.length();
String longStr = lengthA > lengthB ? strA : strB;
String shortStr = lengthA > lengthB ? strB : strA;
Map <Integer, List <String> > maxSubstrList = new TreeMap <Integer, List <String> > ();
for (int length = shortStr.length(); length > = 0; length--) {
for (int startIndex = 0; startIndex <= shortStr.length() - length; startIndex++) {
String substr = shortStr.substring(startIndex, startIndex
+ length);
if (longStr.indexOf(substr) > -1) {
int len = substr.length();
List <String> list;
if (maxSubstrList.containsKey(len)) {
list = (List <String> ) maxSubstrList.get(len);
} else {
list = new ArrayList <String> ();
}
if (!list.contains(substr)) {
list.add(substr);
}
maxSubstrList.put(len, list);
}
}
}
// 找到最大匹配子串
if (maxSubstrList.size() == 0) {
return;
} else {
Iterator <Entry <Integer, List <String> > > it = maxSubstrList
.entrySet().iterator();
Entry <Integer, List <String> > entry = it.next();
while (it.hasNext()) {
entry = it.next();
List <String> maxList = entry.getValue();
for (String str : maxList) {
System.out.println(str);
}
}
}
}
}

输出结果:
a
b
c
e
f
g
ab
bc
ef
fg
abc
efg

这是我在 求最大子串 的程序上稍微改了点代码得到的 求所有相同子串的程序~