1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/* 2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Copyright 2001-2004 The Apache Software Foundation. 3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * you may not use this file except in compliance with the License. 6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * You may obtain a copy of the License at 7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * See the License for the specific language governing permissions and 14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * limitations under the License. 15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpackage org.apache.commons.codec.language; 18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.commons.codec.EncoderException; 20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.commons.codec.StringEncoder; 21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/** 23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a 24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * general purpose scheme to find word with similar phonemes. 25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author Apache Software Foundation 27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @version $Id: Soundex.java,v 1.26 2004/07/07 23:15:24 ggregory Exp $ 28d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * 29d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * @deprecated Please use {@link java.net.URL#openConnection} instead. 30d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a> 31d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * for further details. 32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 33d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath@Deprecated 34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic class Soundex implements StringEncoder { 35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * An instance of Soundex using the US_ENGLISH_MAPPING mapping. 38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see #US_ENGLISH_MAPPING 40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public static final Soundex US_ENGLISH = new Soundex(); 42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This is a default mapping of the 26 letters used in US English. A value of <code>0</code> for a letter position 45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * means do not encode. 46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <p> 47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * (This constant is provided as both an implementation convenience and to allow Javadoc to pick 48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * up the value for the constant values page.) 49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * </p> 50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see #US_ENGLISH_MAPPING 52069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public static final String US_ENGLISH_MAPPING_STRING = "01230120022455012623010202"; 54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This is a default mapping of the 26 letters used in US English. A value of <code>0</code> for a letter position 57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * means do not encode. 58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see Soundex#Soundex(char[]) 60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public static final char[] US_ENGLISH_MAPPING = US_ENGLISH_MAPPING_STRING.toCharArray(); 62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project // BEGIN android-note 64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project // Removed @see reference to SoundexUtils below, since the class isn't 65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project // public. 66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project // END android-note 67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Encodes the Strings and returns the number of characters in the two encoded Strings that are the same. This 69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * return value ranges from 0 through 4: 0 indicates little or no similarity, and 4 indicates strong similarity or 70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * identical values. 71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param s1 73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A String that will be encoded and compared. 74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param s2 75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A String that will be encoded and compared. 76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return The number of characters in the two encoded Strings that are the same from 0 to 4. 77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_8co5.asp"> MS 79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * T-SQL DIFFERENCE </a> 80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws EncoderException 82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * if an error occurs encoding one of the strings 83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 1.3 84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public int difference(String s1, String s2) throws EncoderException { 86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return SoundexUtils.difference(this, s1, s2); 87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The maximum length of a Soundex code - Soundex codes are only four characters by definition. 91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @deprecated This feature is not needed since the encoding size must be constant. Will be removed in 2.0. 93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project private int maxLength = 4; 95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Every letter of the alphabet is "mapped" to a numerical value. This char array holds the values to which each 98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * letter is mapped. This implementation contains a default map for US_ENGLISH 99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project private char[] soundexMapping; 101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Creates an instance using US_ENGLISH_MAPPING 104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see Soundex#Soundex(char[]) 106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see Soundex#US_ENGLISH_MAPPING 107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public Soundex() { 109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project this(US_ENGLISH_MAPPING); 110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Creates a soundex instance using the given mapping. This constructor can be used to provide an internationalized 114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * mapping for a non-Western character set. 115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Every letter of the alphabet is "mapped" to a numerical value. This char array holds the values to which each 117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * letter is mapped. This implementation contains a default map for US_ENGLISH 118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param mapping 120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Mapping array to use when finding the corresponding code for a given character 121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public Soundex(char[] mapping) { 123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project this.setSoundexMapping(mapping); 124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Encodes an Object using the soundex algorithm. This method is provided in order to satisfy the requirements of 128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the Encoder interface, and will throw an EncoderException if the supplied object is not of type java.lang.String. 129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param pObject 131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Object to encode 132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return An object (or type java.lang.String) containing the soundex code which corresponds to the String 133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * supplied. 134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws EncoderException 135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * if the parameter supplied is not of type java.lang.String 136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws IllegalArgumentException 137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * if a character is not mapped 138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public Object encode(Object pObject) throws EncoderException { 140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (!(pObject instanceof String)) { 141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project throw new EncoderException("Parameter supplied to Soundex encode is not of type java.lang.String"); 142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return soundex((String) pObject); 144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Encodes a String using the soundex algorithm. 148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param pString 150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A String object to encode 151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return A Soundex code corresponding to the String supplied 152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws IllegalArgumentException 153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * if a character is not mapped 154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public String encode(String pString) { 156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return soundex(pString); 157069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 158069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 159069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 160069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Used internally by the SoundEx algorithm. 161069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 162069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Consonants from the same code group separated by W or H are treated as one. 163069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 164069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param str 165069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the cleaned working string to encode (in upper case). 166069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param index 167069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the character position to encode 168069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return Mapping code for a particular character 169069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws IllegalArgumentException 170069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * if the character is not mapped 171069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 172069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project private char getMappingCode(String str, int index) { 173069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project char mappedChar = this.map(str.charAt(index)); 174069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project // HW rule check 175069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (index > 1 && mappedChar != '0') { 176069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project char hwChar = str.charAt(index - 1); 177069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if ('H' == hwChar || 'W' == hwChar) { 178069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project char preHWChar = str.charAt(index - 2); 179069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project char firstCode = this.map(preHWChar); 180069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (firstCode == mappedChar || 'H' == preHWChar || 'W' == preHWChar) { 181069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return 0; 182069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 183069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 184069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 185069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return mappedChar; 186069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 187069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 188069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 189069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Returns the maxLength. Standard Soundex 190069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 191069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @deprecated This feature is not needed since the encoding size must be constant. Will be removed in 2.0. 192069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return int 193069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 194069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public int getMaxLength() { 195069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return this.maxLength; 196069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 197069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 198069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 199069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Returns the soundex mapping. 200069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 201069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return soundexMapping. 202069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 203069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project private char[] getSoundexMapping() { 204069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return this.soundexMapping; 205069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 206069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 207069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 208069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Maps the given upper-case character to it's Soudex code. 209069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 210069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param ch 211069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * An upper-case character. 212069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return A Soundex code. 213069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws IllegalArgumentException 214069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Thrown if <code>ch</code> is not mapped. 215069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 216069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project private char map(char ch) { 217069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project int index = ch - 'A'; 218069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (index < 0 || index >= this.getSoundexMapping().length) { 219069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project throw new IllegalArgumentException("The character is not mapped: " + ch); 220069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 221069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return this.getSoundexMapping()[index]; 222069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 223069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 224069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 225069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Sets the maxLength. 226069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 227069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @deprecated This feature is not needed since the encoding size must be constant. Will be removed in 2.0. 228069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param maxLength 229069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The maxLength to set 230069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 231069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public void setMaxLength(int maxLength) { 232069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project this.maxLength = maxLength; 233069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 234069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 235069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 236069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Sets the soundexMapping. 237069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 238069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param soundexMapping 239069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The soundexMapping to set. 240069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 241069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project private void setSoundexMapping(char[] soundexMapping) { 242069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project this.soundexMapping = soundexMapping; 243069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 244069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 245069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 246069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Retreives the Soundex code for a given String object. 247069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 248069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param str 249069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * String to encode using the Soundex algorithm 250069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return A soundex code for the String supplied 251069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws IllegalArgumentException 252069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * if a character is not mapped 253069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 254069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project public String soundex(String str) { 255069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (str == null) { 256069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return null; 257069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 258069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project str = SoundexUtils.clean(str); 259069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (str.length() == 0) { 260069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return str; 261069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 262069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project char out[] = {'0', '0', '0', '0'}; 263069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project char last, mapped; 264069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project int incount = 1, count = 1; 265069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project out[0] = str.charAt(0); 266069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project last = getMappingCode(str, 0); 267069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project while ((incount < str.length()) && (count < out.length)) { 268069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project mapped = getMappingCode(str, incount++); 269069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (mapped != 0) { 270069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if ((mapped != '0') && (mapped != last)) { 271069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project out[count++] = mapped; 272069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 273069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project last = mapped; 274069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 275069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 276069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return new String(out); 277069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 278069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 279069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project} 280