1. String difference(final String str1, final String str2)
说明:Compares two Strings, and returns the portion where they differ.
i.e:
("ahc", "bcu") -> "ahbu"
/** * * @Title: difference * @Description: Compares two Strings, and returns the portion where they differ. * @param str1 input string1 * @param str2 input string2 * @return return the difference characters, keep the original sequence */ public static String difference(final String str1, final String str2) { if (null == str1 || null == str2) { return str1 == str2 ? null : (str1 == null ? str2 : str1); } if (str1.equals(str2)) { return ""; } else { String newStr = removeDuplicated(false, str1, str2); String duplicated = findDuplicated(newStr); final int length = duplicated.length(); if (length == 0) { return newStr; } else { String rs = removeDuplicated(true, duplicated, newStr); return new String(rs.toCharArray(), length, rs.length() - length); } } }
2. List<String> findCommonSubstring(String...str)
说明:Returns the first longest substring from Strings.
i.e:
({"ahcdx", "bcuycd", "cejcdm"}) -> "cd"
/** * * @Title: findCommonSubstring * @Description: Returns the first longest substring from Strings. * * @param strArr input string array * @return the repeated Stringc */ public static List<String> findCommonSubstring(String... strArr) { /* initial check */ if (strArr == null || strArr.length == 0) { return null; } else if (strArr.length == 1) { return Arrays.asList(strArr); } /* check the first element */ if (isEmpty(strArr[0])) { return null; } int smallLen = strArr[0].length(); int index = 0; int len = strArr.length; /* identify smallest String */ for (int i = 1; i < len; i++) { /* if contains empty, returns directly */ if (isEmpty(strArr[i])) { return null; } if (smallLen > strArr[i].length()) { smallLen = strArr[i].length(); index = i; } } String smallStr = strArr[index]; List<String> list = new ArrayList<String>(); int step = 1; /* outer loop smallest string */ for (int i = 0; i < smallLen; i++) { boolean isPass = true; /* inner loop smallest string */ for (int j = i + step; j <= smallLen; j++) { String tempCom = smallStr.substring(i, j); /* * loop and judge whether temp string is contained in other strings */ for (int k = 0; k < len; k++) { if (k != index && !strArr[k].contains(tempCom)) { isPass = false; break; } } /* if not contained, terminal the loop */ if (!isPass) { break; } if (list.isEmpty()) { list.add(tempCom); } else { int maxLen = list.get(0).length(); step = j - i; /* if existing longer string, clear the list */ if (maxLen < step) { list.clear(); } /* if existing same and longer string, add it to list */ if (maxLen <= step && !list.contains(tempCom)) { list.add(tempCom); } } } } return list; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-21 15:50:16