From 444f8d206e253c98b5c0efb8531e4c36f13ed8c7 Mon Sep 17 00:00:00 2001 From: guillas Date: Tue, 18 Feb 2020 15:14:52 +0100 Subject: [PATCH 1/2] CODEC-281: encode kc as K --- .../codec/language/DoubleMetaphone.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/commons/codec/language/DoubleMetaphone.java b/src/main/java/org/apache/commons/codec/language/DoubleMetaphone.java index 3013c93451..59f4e3e675 100644 --- a/src/main/java/org/apache/commons/codec/language/DoubleMetaphone.java +++ b/src/main/java/org/apache/commons/codec/language/DoubleMetaphone.java @@ -132,8 +132,7 @@ public String doubleMetaphone(String value, final boolean alternate) { index = handleJ(value, result, index, slavoGermanic); break; case 'K': - result.append('K'); - index = charAt(value, index + 1) == 'K' ? index + 2 : index + 1; + index = handleK(value, result, index); break; case 'L': index = handleL(value, result, index); @@ -543,6 +542,25 @@ private int handleJ(final String value, final DoubleMetaphoneResult result, int return index; } + /** + * Handles 'K' cases. + */ + private int handleK(final String value, final DoubleMetaphoneResult result, int index) { + result.append('K'); + if (charAt(value, index + 1) == 'K') { + index += 2; + } else if ((charAt(value, index + 1) == 'C')) { //-- in "Kirkcaldy", "kc" should be encoded "K" instead of "KK" --// + final DoubleMetaphoneResult nextCharResult = new DoubleMetaphoneResult(this.getMaxCodeLen()); + int nextCharIndex = handleC(value, nextCharResult, index + 1); + if (nextCharResult.getPrimary().equals("K")) { + index = nextCharIndex; + } + } else { + index++; + } + return index; + } + /** * Handles 'L' cases. */ From eb9ca3d53badf69e94b1c90cc6c7daea4638015a Mon Sep 17 00:00:00 2001 From: guillas Date: Wed, 19 Feb 2020 08:47:39 +0100 Subject: [PATCH 2/2] CODEC-281: add test on Kirkcaldy in DoubleMetaphone2Test --- .../org/apache/commons/codec/language/DoubleMetaphone2Test.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/org/apache/commons/codec/language/DoubleMetaphone2Test.java b/src/test/java/org/apache/commons/codec/language/DoubleMetaphone2Test.java index d088ec51f9..aba6e5f410 100644 --- a/src/test/java/org/apache/commons/codec/language/DoubleMetaphone2Test.java +++ b/src/test/java/org/apache/commons/codec/language/DoubleMetaphone2Test.java @@ -512,6 +512,7 @@ public class DoubleMetaphone2Test extends StringEncoderAbstractTest