From beb39d4e003d0d9e8e3eff02c3529c87e7a4af03 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Thu, 18 Apr 2024 15:49:46 -0400 Subject: [PATCH] Wrong output of DoubleMetaphone in 1.16.1 --- src/changes/changes.xml | 1 + .../org/apache/commons/codec/language/DoubleMetaphone.java | 1 + .../apache/commons/codec/language/DoubleMetaphoneTest.java | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 8db327adef..359a4155ba 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -45,6 +45,7 @@ The type attribute can be add,update,fix,remove. + Wrong output of DoubleMetaphone in 1.16.1. Optimize memory allocation in PhoneticEngine. BCodec and QCodec encode() methods throw UnsupportedCharsetException instead of EncoderException. Set Javadoc link to latest Java API LTS version. 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 f7f84d72c5..4dd8fd3376 100644 --- a/src/main/java/org/apache/commons/codec/language/DoubleMetaphone.java +++ b/src/main/java/org/apache/commons/codec/language/DoubleMetaphone.java @@ -617,6 +617,7 @@ private int handleG(final String value, final DoubleMetaphoneResult result, int private int handleGH(final String value, final DoubleMetaphoneResult result, int index) { if (index > 0 && !isVowel(charAt(value, index - 1))) { result.append('K'); + index += 2; } else if (index == 0) { if (charAt(value, index + 2) == 'I') { result.append('J'); diff --git a/src/test/java/org/apache/commons/codec/language/DoubleMetaphoneTest.java b/src/test/java/org/apache/commons/codec/language/DoubleMetaphoneTest.java index bc4de19fa0..0efcfb85b8 100644 --- a/src/test/java/org/apache/commons/codec/language/DoubleMetaphoneTest.java +++ b/src/test/java/org/apache/commons/codec/language/DoubleMetaphoneTest.java @@ -1070,6 +1070,11 @@ public void testCodec184() { assertFalse(new DoubleMetaphone().isDoubleMetaphoneEqual("", "aa", true)); } + @Test + public void testCodec320() { + assertTrue(new DoubleMetaphone().isDoubleMetaphoneEqual("ANGHELINA", "ANKL", false)); + } + @Test public void testDoubleMetaphone() { assertDoubleMetaphone("TSTN", "testing");