diff --git a/src/main/java/org/apache/commons/codec/language/Nysiis.java b/src/main/java/org/apache/commons/codec/language/Nysiis.java index efcc13f6ad..18baa5b19a 100644 --- a/src/main/java/org/apache/commons/codec/language/Nysiis.java +++ b/src/main/java/org/apache/commons/codec/language/Nysiis.java @@ -267,7 +267,8 @@ public String nysiis(String str) { // First character of key = first character of name. final StringBuilder key = new StringBuilder(str.length()); - key.append(str.charAt(0)); + final char firstChar = str.charAt(0); + key.append(firstChar); // Transcode remaining characters, incrementing by one character each time final char[] chars = str.toCharArray(); @@ -306,6 +307,12 @@ public String nysiis(String str) { if (lastChar == 'A') { key.deleteCharAt(key.length() - 1); } + + if (key.length() == 0) { + // We've removed the first character of the string. Likely because it was an S or A + // We should return at least the first character + key.append(firstChar); + } } final String string = key.toString(); diff --git a/src/test/java/org/apache/commons/codec/language/NysiisTest.java b/src/test/java/org/apache/commons/codec/language/NysiisTest.java index 5e594eacd6..475513acd9 100644 --- a/src/test/java/org/apache/commons/codec/language/NysiisTest.java +++ b/src/test/java/org/apache/commons/codec/language/NysiisTest.java @@ -17,12 +17,12 @@ package org.apache.commons.codec.language; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - import org.apache.commons.codec.AbstractStringEncoderTest; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + /** * Tests {@link Nysiis} */ @@ -136,7 +136,9 @@ void testDropBy() { new String[] { "JILES", "JAL" }, // violates 6: if the last two characters are AY, remove A new String[] { "CARRAWAY", "CARY" }, // Original: CARAY - new String[] { "YAMADA", "YANAD" }); + new String[] { "YAMADA", "YANAD" }, + new String[] { "ASH", "A"}, + new String[] { "SSH", "S"}); } @Test