javaで文字列の差分文字列を取得するサンプルコードです。文字列が前方一致しない場合はnullを返すようにしています。
JAVAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
/** * <p>[概 要] 文字列の差分取得処理</p> * <p>[詳 細] 文字列が前方一致し、且つ比較対象文字列の前方一致しない部分の文字列を返します。</p> * <p> 【前方一致する場合】 str1:abc, str2:abcd = return:d</pre> * <p> 【前方一致する場合】 str1:abcd, str2:abc = return:null</p> * <p> 【前方一致する場合】 str1:abc, str2:abc = return:null</pre> * <p> 【前方一致しない場合】str1:abc, str2:def = return:null</pre> * <p>[備 考] </p> * @param str1 比較元文字列 * @param str2 比較対象文字列 * @return String型オブジェクト */ public static String diffFrontUnmatchStr(String str1, String str2){ StringBuffer buf = new StringBuffer(); String result = null; if(str1 != null && str2 != null) { // 前方一致しない部分の文字列を取得 String tmpStr1 = str1.trim(); String tmpStr2 = str2.trim(); boolean firstCharMachFlg = false; for(char str1Char : tmpStr1.toCharArray()) { buf.setLength(0); boolean unmachFlg = false; for(char str2Char : tmpStr2.toCharArray()) { // 不一致以降の文字列を全て設定 if(unmachFlg || str1Char != str2Char) { buf.append(str2Char); unmachFlg = true; } else { firstCharMachFlg = true; } } // 判定した文字列は除外 tmpStr2 = buf.toString(); } if(!firstCharMachFlg || buf.toString().isEmpty()) { result = null; } else { result = buf.toString(); } } return result; } |
JUnitサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
@Test public void diffFrontUnmatchStrTest() { // 準備 String str1 = null; String str2 = "abc"; String str3 = "abcdefg"; String str4 = "azbcdefg"; String str5 = "xyz"; String str6 = "zbc"; String str7 = ""; // 実行 String result1 = UtilSample1.diffFrontUnmatchStr(str1, str1); String result2 = UtilSample1.diffFrontUnmatchStr(str2, str1); String result3 = UtilSample1.diffFrontUnmatchStr(str1, str2); String result4 = UtilSample1.diffFrontUnmatchStr(str2, str3); String result5 = UtilSample1.diffFrontUnmatchStr(str3, str2); String result6 = UtilSample1.diffFrontUnmatchStr(str2, str4); String result7 = UtilSample1.diffFrontUnmatchStr(str2, str5); String result8 = UtilSample1.diffFrontUnmatchStr(str2, str6); String result9 = UtilSample1.diffFrontUnmatchStr(str2, str2); String result10 = UtilSample1.diffFrontUnmatchStr(str3, str4); String result11 = UtilSample1.diffFrontUnmatchStr(str4, str3); String result12 = UtilSample1.diffFrontUnmatchStr(str7, str7); String result13 = UtilSample1.diffFrontUnmatchStr(str6, str2); String result14 = UtilSample1.diffFrontUnmatchStr(str4, str2); // 検証 assertNull("戻り値がnullではありません。", result1); assertNull("戻り値がnullではありません。", result2); assertNull("戻り値がnullではありません。", result3); assertEquals("文字列が一致していません。", "defg", result4); assertNull("戻り値がnullではありません。", result5); assertEquals("文字列が一致していません。", "zbcdefg", result6); assertNull("戻り値がnullではありません。", result7); assertNull("戻り値がnullではありません。", result8); assertNull("戻り値がnullではありません。", result9); assertEquals("文字列が一致していません。", "zbcdefg", result10); assertNull("戻り値がnullではありません。", result11); assertNull("戻り値がnullではありません。", result12); assertNull("戻り値がnullではありません。", result13); assertNull("戻り値がnullではありません。", result14); } |