You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2018/09/27 21:43:52 UTC

svn commit: r1842176 - /commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java

Author: sebb
Date: Thu Sep 27 21:43:52 2018
New Revision: 1842176

URL: http://svn.apache.org/viewvc?rev=1842176&view=rev
Log:
Simplify by using switch on char value; also don't convert to String unnecessarily

Modified:
    commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java

Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java?rev=1842176&r1=1842175&r2=1842176&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java (original)
+++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java Thu Sep 27 21:43:52 2018
@@ -286,12 +286,6 @@ public class ColognePhonetic implements
      * <li>small sharp s, German</li>
      * </ul>
      */
-    private static final char[][] PREPROCESS_MAP = new char[][]{
-        {'\u00C4', 'A'}, // capital a, umlaut mark
-        {'\u00DC', 'U'}, // capital u, umlaut mark
-        {'\u00D6', 'O'}, // capital o, umlaut mark
-        {'\u00DF', 'S'} // small sharp s, German
-    };
 
     /*
      * Returns whether the array contains the key, or not.
@@ -321,10 +315,8 @@ public class ColognePhonetic implements
             return null;
         }
 
-        text = preprocess(text);
-
-        final CologneOutputBuffer output = new CologneOutputBuffer(text.length() * 2);
-        final CologneInputBuffer input = new CologneInputBuffer(text.toCharArray());
+        final CologneInputBuffer input = new CologneInputBuffer(preprocess(text));
+        final CologneOutputBuffer output = new CologneOutputBuffer(input.length() * 2);
 
         char nextChar;
 
@@ -423,23 +415,27 @@ public class ColognePhonetic implements
     }
 
     /**
-     * Converts the string to upper case and replaces germanic characters as defined in {@link #PREPROCESS_MAP}.
+     * Converts the string to upper case and replaces Germanic umlaut characters
      */
-    private String preprocess(String text) {
-        text = text.toUpperCase(Locale.GERMAN);
-
-        final char[] chrs = text.toCharArray();
+    private char[] preprocess(String text) {
+        // This converts German small sharp s (Eszett) to SS
+        final char[] chrs = text.toUpperCase(Locale.GERMAN).toCharArray();
 
         for (int index = 0; index < chrs.length; index++) {
-            if (chrs[index] > 'Z') {
-                for (final char[] element : PREPROCESS_MAP) {
-                    if (chrs[index] == element[0]) {
-                        chrs[index] = element[1];
-                        break;
-                    }
-                }
+            switch (chrs[index]) {
+                case '\u00C4': // capital A, umlaut mark
+                    chrs[index] = 'A';
+                    break;
+                case '\u00DC': // capital U, umlaut mark
+                    chrs[index] = 'U';
+                    break;
+                case '\u00D6': // capital O, umlaut mark
+                    chrs[index] = 'O';
+                    break;
+                default:
+                    break;
             }
         }
-        return new String(chrs);
+        return chrs;
     }
 }