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
maxCodeLenis mutablesetMaxCodeLen(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.DoubleMetaphoneResultInner class for storing 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 4private static java.lang.String[]SILENT_STARTPrefixes when present which are not pronouncedprivate static java.lang.StringVOWELS"Vowels" to test for
-
Constructor Summary
Constructors Constructor Description DoubleMetaphone()Creates an instance of this DoubleMetaphone encoder
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected charcharAt(java.lang.String value, int index)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)java.lang.StringdoubleMetaphone(java.lang.String value)Encode a value with Double Metaphone.java.lang.StringdoubleMetaphone(java.lang.String value, boolean alternate)Encode a value with Double Metaphone, optionally using the alternate encoding.java.lang.Objectencode(java.lang.Object obj)Encode the value using DoubleMetaphone.java.lang.Stringencode(java.lang.String value)Encode the value using DoubleMetaphone.intgetMaxCodeLen()Returns 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)Check if the Double Metaphone values of twoStringvalues are equal.booleanisDoubleMetaphoneEqual(java.lang.String value1, java.lang.String value2, boolean alternate)Check if the Double Metaphone values of twoStringvalues are equal, optionally using the alternate value.private booleanisSilentStart(java.lang.String value)Determines whether or not the value starts with a silent letter.private booleanisSlavoGermanic(java.lang.String value)Determines whether or not a value is of slavo-germanic origin.private booleanisVowel(char ch)Determines whether or not a character is a vowel or notvoidsetMaxCodeLen(int maxCodeLen)Sets the maxCodeLen.
-
-
-
Field Detail
-
VOWELS
private static final java.lang.String VOWELS
"Vowels" to test for- 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
-
doubleMetaphone
public java.lang.String doubleMetaphone(java.lang.String value)
Encode 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)Encode a value with Double Metaphone, optionally using the alternate encoding.- Parameters:
value- String to encodealternate- use alternate encode- Returns:
- an encoded string
-
encode
public java.lang.Object encode(java.lang.Object obj) throws EncoderExceptionEncode 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)
Encode the value using DoubleMetaphone.- Specified by:
encodein interfaceStringEncoder- Parameters:
value- String to encode- Returns:
- An encoded String
-
isDoubleMetaphoneEqual
public boolean isDoubleMetaphoneEqual(java.lang.String value1, java.lang.String value2)Check if 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)Check if 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.
-
getMaxCodeLen
public int getMaxCodeLen()
Returns the maxCodeLen.- Returns:
- int
-
setMaxCodeLen
public void setMaxCodeLen(int maxCodeLen)
Sets the maxCodeLen.- Parameters:
maxCodeLen- The maxCodeLen to set
-
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.
-
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'.
-
isSlavoGermanic
private boolean isSlavoGermanic(java.lang.String value)
Determines whether or not a value is of slavo-germanic origin. A value is of slavo-germanic origin if it contians any of 'W', 'K', 'CZ', or 'WITZ'.
-
isVowel
private boolean isVowel(char ch)
Determines whether or not a character is a vowel or not
-
isSilentStart
private boolean isSilentStart(java.lang.String value)
Determines 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'.
-
cleanInput
private java.lang.String cleanInput(java.lang.String input)
Cleans the input.
-
charAt
protected char charAt(java.lang.String value, int index)
-
contains
protected static boolean contains(java.lang.String value, int start, int length, java.lang.String... criteria)
-
-