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 * Utility methods for {@link Soundex} and {@link RefinedSoundex} classes. 24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author Apache Software Foundation 26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @version $Id: SoundexUtils.java,v 1.5 2004/03/17 18:31:35 ggregory Exp $ 27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 1.3 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 Projectfinal class SoundexUtils { 35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Cleans up the input string before Soundex processing by only returning 38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * upper case letters. 39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param str 41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The String to clean. 42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return A clean String. 43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project static String clean(String str) { 45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (str == null || str.length() == 0) { 46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return str; 47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project int len = str.length(); 49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project char[] chars = new char[len]; 50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project int count = 0; 51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project for (int i = 0; i < len; i++) { 52069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (Character.isLetter(str.charAt(i))) { 53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project chars[count++] = str.charAt(i); 54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (count == len) { 57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return str.toUpperCase(); 58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return new String(chars, 0, count).toUpperCase(); 60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Encodes the Strings and returns the number of characters in the two 64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * encoded Strings that are the same. 65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <ul> 66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li>For Soundex, this return value ranges from 0 through 4: 0 indicates 67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * little or no similarity, and 4 indicates strong similarity or identical 68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * values.</li> 69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li>For refined Soundex, the return value can be greater than 4.</li> 70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * </ul> 71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param encoder 73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The encoder to use to encode the Strings. 74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param s1 75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A String that will be encoded and compared. 76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param s2 77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A String that will be encoded and compared. 78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return The number of characters in the two Soundex encoded Strings that 79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * are the same. 80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see #differenceEncoded(String,String) 82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_8co5.asp"> 83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * MS T-SQL DIFFERENCE</a> 84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws EncoderException 86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * if an error occurs encoding one of the strings 87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project static int difference(StringEncoder encoder, String s1, String s2) throws EncoderException { 89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return differenceEncoded(encoder.encode(s1), encoder.encode(s2)); 90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Returns the number of characters in the two Soundex encoded Strings that 94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * are the same. 95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <ul> 96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li>For Soundex, this return value ranges from 0 through 4: 0 indicates 97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * little or no similarity, and 4 indicates strong similarity or identical 98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * values.</li> 99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li>For refined Soundex, the return value can be greater than 4.</li> 100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * </ul> 101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param es1 103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * An encoded String. 104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param es2 105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * An encoded String. 106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return The number of characters in the two Soundex encoded Strings that 107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * are the same. 108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @see <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_8co5.asp"> 110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * MS T-SQL DIFFERENCE</a> 111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project static int differenceEncoded(String es1, String es2) { 113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (es1 == null || es2 == null) { 115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return 0; 116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project int lengthToMatch = Math.min(es1.length(), es2.length()); 118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project int diff = 0; 119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project for (int i = 0; i < lengthToMatch; i++) { 120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if (es1.charAt(i) == es2.charAt(i)) { 121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project diff++; 122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return diff; 125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project} 128