Class DoubleMetaphone
- java.lang.Object
-
- org.apache.commons.codec.language.DoubleMetaphone
-
- All Implemented Interfaces:
Encoder,StringEncoder
public class DoubleMetaphone extends java.lang.Object implements StringEncoder
Encodes a string into a Double Metaphone value. This Implementation is based on the algorithm by Lawrence Philips.This class is conditionally thread-safe. The instance field for the maximum code length is mutable
setMaxCodeLen(int)but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not invokesetMaxCodeLen(int)after initial setup.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classDoubleMetaphone.DoubleMetaphoneResultStores results, since there is the optional alternate encoding.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String[]ES_EP_EB_EL_EY_IB_IL_IN_IE_EI_ERprivate static java.lang.String[]L_R_N_M_B_H_F_V_W_SPACEprivate static java.lang.String[]L_T_K_S_N_M_B_Zprivate intmaxCodeLenMaximum length of an encoding, default is 4.private static java.lang.String[]SILENT_STARTPrefixes when present which are not pronounced.private static java.lang.StringVOWELS"Vowels" to test.
-
Constructor Summary
Constructors Constructor Description DoubleMetaphone()Constructs a new instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected charcharAt(java.lang.String value, int index)Gets the character at indexindexif available, orCharacter.MIN_VALUEif out of bounds.private java.lang.StringcleanInput(java.lang.String input)Cleans the input.private booleanconditionC0(java.lang.String value, int index)Complex condition 0 for 'C'.private booleanconditionCH0(java.lang.String value, int index)Complex condition 0 for 'CH'.private booleanconditionCH1(java.lang.String value, int index)Complex condition 1 for 'CH'.private booleanconditionL0(java.lang.String value, int index)Complex condition 0 for 'L'.private booleanconditionM0(java.lang.String value, int index)Complex condition 0 for 'M'.protected static booleancontains(java.lang.String value, int start, int length, java.lang.String... criteria)Tests whethervaluecontains any of thecriteriastarting at indexstartand matching up to lengthlength.java.lang.StringdoubleMetaphone(java.lang.String value)Encodes a value with Double Metaphone.java.lang.StringdoubleMetaphone(java.lang.String value, boolean alternate)Encodes a value with Double Metaphone, optionally using the alternate encoding.java.lang.Objectencode(java.lang.Object obj)Encodes the value using DoubleMetaphone.java.lang.Stringencode(java.lang.String value)Encodes the value using DoubleMetaphone.intgetMaxCodeLen()Gets the maxCodeLen.private inthandleAEIOUY(DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'A', 'E', 'I', 'O', 'U', and 'Y' cases.private inthandleC(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'C' cases.private inthandleCC(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'CC' cases.private inthandleCH(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'CH' cases.private inthandleD(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'D' cases.private inthandleG(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'G' cases.private inthandleGH(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'GH' cases.private inthandleH(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'H' cases.private inthandleJ(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'J' cases.private inthandleL(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'L' cases.private inthandleP(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'P' cases.private inthandleR(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'R' cases.private inthandleS(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'S' cases.private inthandleSC(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'SC' cases.private inthandleT(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'T' cases.private inthandleW(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'W' cases.private inthandleX(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'X' cases.private inthandleZ(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'Z' cases.booleanisDoubleMetaphoneEqual(java.lang.String value1, java.lang.String value2)Tests whether the Double Metaphone values of twoStringvalues are equal.booleanisDoubleMetaphoneEqual(java.lang.String value1, java.lang.String value2, boolean alternate)Tests whether the Double Metaphone values of twoStringvalues are equal, optionally using the alternate value.private booleanisSilentStart(java.lang.String value)Tests whether or not the value starts with a silent letter.private booleanisSlavoGermanic(java.lang.String value)Tests whether or not a value is of slavo-germanic origin.private booleanisVowel(char ch)Tests whether or not a character is a vowel or not.voidsetMaxCodeLen(int maxCodeLen)Sets the maxCodeLen.
-
-
-
Field Detail
-
VOWELS
private static final java.lang.String VOWELS
"Vowels" to test.- See Also:
- Constant Field Values
-
SILENT_START
private static final java.lang.String[] SILENT_START
Prefixes when present which are not pronounced.
-
L_R_N_M_B_H_F_V_W_SPACE
private static final java.lang.String[] L_R_N_M_B_H_F_V_W_SPACE
-
ES_EP_EB_EL_EY_IB_IL_IN_IE_EI_ER
private static final java.lang.String[] ES_EP_EB_EL_EY_IB_IL_IN_IE_EI_ER
-
L_T_K_S_N_M_B_Z
private static final java.lang.String[] L_T_K_S_N_M_B_Z
-
maxCodeLen
private int maxCodeLen
Maximum length of an encoding, default is 4.
-
-
Method Detail
-
contains
protected static boolean contains(java.lang.String value, int start, int length, java.lang.String... criteria)Tests whethervaluecontains any of thecriteriastarting at indexstartand matching up to lengthlength.- Parameters:
value- The value to test.start- Where invalueto start testing.length- How many to test.criteria- The search criteria.- Returns:
- Whether there was a match.
-
charAt
protected char charAt(java.lang.String value, int index)Gets the character at indexindexif available, orCharacter.MIN_VALUEif out of bounds.- Parameters:
value- The String to query.index- A string index.- Returns:
- The character at the index or
Character.MIN_VALUEif out of bounds.
-
cleanInput
private java.lang.String cleanInput(java.lang.String input)
Cleans the input.
-
conditionC0
private boolean conditionC0(java.lang.String value, int index)Complex condition 0 for 'C'.
-
conditionCH0
private boolean conditionCH0(java.lang.String value, int index)Complex condition 0 for 'CH'.
-
conditionCH1
private boolean conditionCH1(java.lang.String value, int index)Complex condition 1 for 'CH'.
-
conditionL0
private boolean conditionL0(java.lang.String value, int index)Complex condition 0 for 'L'.
-
conditionM0
private boolean conditionM0(java.lang.String value, int index)Complex condition 0 for 'M'.
-
doubleMetaphone
public java.lang.String doubleMetaphone(java.lang.String value)
Encodes a value with Double Metaphone.- Parameters:
value- String to encode.- Returns:
- an encoded string.
-
doubleMetaphone
public java.lang.String doubleMetaphone(java.lang.String value, boolean alternate)Encodes a value with Double Metaphone, optionally using the alternate encoding.- Parameters:
value- String to encode.alternate- use alternate encode.- Returns:
- an encoded string.
-
encode
public java.lang.Object encode(java.lang.Object obj) throws EncoderExceptionEncodes the value using DoubleMetaphone. It will only work ifobjis aString(likeMetaphone).- Specified by:
encodein interfaceEncoder- Parameters:
obj- Object to encode (should be of type String).- Returns:
- An encoded Object (will be of type String).
- Throws:
EncoderException- encode parameter is not of type String.
-
encode
public java.lang.String encode(java.lang.String value)
Encodes the value using DoubleMetaphone.- Specified by:
encodein interfaceStringEncoder- Parameters:
value- String to encode.- Returns:
- An encoded String.
-
getMaxCodeLen
public int getMaxCodeLen()
Gets the maxCodeLen.- Returns:
- the maxCodeLen.
-
handleAEIOUY
private int handleAEIOUY(DoubleMetaphone.DoubleMetaphoneResult result, int index)
Handles 'A', 'E', 'I', 'O', 'U', and 'Y' cases.
-
handleC
private int handleC(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'C' cases.
-
handleCC
private int handleCC(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'CC' cases.
-
handleCH
private int handleCH(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'CH' cases.
-
handleD
private int handleD(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'D' cases.
-
handleG
private int handleG(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'G' cases.
-
handleGH
private int handleGH(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'GH' cases.
-
handleH
private int handleH(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'H' cases.
-
handleJ
private int handleJ(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'J' cases.
-
handleL
private int handleL(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'L' cases.
-
handleP
private int handleP(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'P' cases.
-
handleR
private int handleR(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'R' cases.
-
handleS
private int handleS(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'S' cases.
-
handleSC
private int handleSC(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'SC' cases.
-
handleT
private int handleT(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'T' cases.
-
handleW
private int handleW(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'W' cases.
-
handleX
private int handleX(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index)Handles 'X' cases.
-
handleZ
private int handleZ(java.lang.String value, DoubleMetaphone.DoubleMetaphoneResult result, int index, boolean slavoGermanic)Handles 'Z' cases.
-
isDoubleMetaphoneEqual
public boolean isDoubleMetaphoneEqual(java.lang.String value1, java.lang.String value2)Tests whether the Double Metaphone values of twoStringvalues are equal.- Parameters:
value1- The left-hand side of the encodedString.equals(Object).value2- The right-hand side of the encodedString.equals(Object).- Returns:
trueif the encodedStrings are equal;falseotherwise.- See Also:
isDoubleMetaphoneEqual(String,String,boolean)
-
isDoubleMetaphoneEqual
public boolean isDoubleMetaphoneEqual(java.lang.String value1, java.lang.String value2, boolean alternate)Tests whether the Double Metaphone values of twoStringvalues are equal, optionally using the alternate value.- Parameters:
value1- The left-hand side of the encodedString.equals(Object).value2- The right-hand side of the encodedString.equals(Object).alternate- use the alternate value iftrue.- Returns:
trueif the encodedStrings are equal;falseotherwise.
-
isSilentStart
private boolean isSilentStart(java.lang.String value)
Tests whether or not the value starts with a silent letter. It will returntrueif the value starts with any of 'GN', 'KN', 'PN', 'WR' or 'PS'.
-
isSlavoGermanic
private boolean isSlavoGermanic(java.lang.String value)
Tests whether or not a value is of slavo-germanic origin. A value is of Slavo-Germanic origin if it contains any of 'W', 'K', 'CZ', or 'WITZ'.
-
isVowel
private boolean isVowel(char ch)
Tests whether or not a character is a vowel or not.
-
setMaxCodeLen
public void setMaxCodeLen(int maxCodeLen)
Sets the maxCodeLen.- Parameters:
maxCodeLen- The maxCodeLen to set.
-
-