~s-friedemann/tomdroid/sshfs

« back to all changes in this revision

Viewing changes to lib/commons-codec-1.4/apidocs/src-html/org/apache/commons/codec/language/Soundex.html

  • Committer: Benoit Garret
  • Date: 2010-03-06 20:39:56 UTC
  • mto: (185.4.1 sync-ui)
  • mto: This revision was merged to the branch mainline in revision 186.
  • Revision ID: benoit.garret_launchpad@gadz.org-20100306203956-k6vlss6hk2d91j4n
Put the signpost and commons-codec libraries in lib/

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<HTML>
 
2
<BODY BGCOLOR="white">
 
3
<PRE>
 
4
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
 
5
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
 
6
<FONT color="green">003</FONT>     * contributor license agreements.  See the NOTICE file distributed with<a name="line.3"></a>
 
7
<FONT color="green">004</FONT>     * this work for additional information regarding copyright ownership.<a name="line.4"></a>
 
8
<FONT color="green">005</FONT>     * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a>
 
9
<FONT color="green">006</FONT>     * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
 
10
<FONT color="green">007</FONT>     * the License.  You may obtain a copy of the License at<a name="line.7"></a>
 
11
<FONT color="green">008</FONT>     * <a name="line.8"></a>
 
12
<FONT color="green">009</FONT>     *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
 
13
<FONT color="green">010</FONT>     * <a name="line.10"></a>
 
14
<FONT color="green">011</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
 
15
<FONT color="green">012</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
 
16
<FONT color="green">013</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
 
17
<FONT color="green">014</FONT>     * See the License for the specific language governing permissions and<a name="line.14"></a>
 
18
<FONT color="green">015</FONT>     * limitations under the License.<a name="line.15"></a>
 
19
<FONT color="green">016</FONT>     */<a name="line.16"></a>
 
20
<FONT color="green">017</FONT>    <a name="line.17"></a>
 
21
<FONT color="green">018</FONT>    package org.apache.commons.codec.language;<a name="line.18"></a>
 
22
<FONT color="green">019</FONT>    <a name="line.19"></a>
 
23
<FONT color="green">020</FONT>    import org.apache.commons.codec.EncoderException;<a name="line.20"></a>
 
24
<FONT color="green">021</FONT>    import org.apache.commons.codec.StringEncoder;<a name="line.21"></a>
 
25
<FONT color="green">022</FONT>    <a name="line.22"></a>
 
26
<FONT color="green">023</FONT>    /**<a name="line.23"></a>
 
27
<FONT color="green">024</FONT>     * Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a<a name="line.24"></a>
 
28
<FONT color="green">025</FONT>     * general purpose scheme to find word with similar phonemes.<a name="line.25"></a>
 
29
<FONT color="green">026</FONT>     * <a name="line.26"></a>
 
30
<FONT color="green">027</FONT>     * @author Apache Software Foundation<a name="line.27"></a>
 
31
<FONT color="green">028</FONT>     * @version $Id: Soundex.java 794026 2009-07-14 19:21:23Z ggregory $<a name="line.28"></a>
 
32
<FONT color="green">029</FONT>     */<a name="line.29"></a>
 
33
<FONT color="green">030</FONT>    public class Soundex implements StringEncoder {<a name="line.30"></a>
 
34
<FONT color="green">031</FONT>    <a name="line.31"></a>
 
35
<FONT color="green">032</FONT>        /**<a name="line.32"></a>
 
36
<FONT color="green">033</FONT>         * This is a default mapping of the 26 letters used in US English. A value of &lt;code&gt;0&lt;/code&gt; for a letter position<a name="line.33"></a>
 
37
<FONT color="green">034</FONT>         * means do not encode.<a name="line.34"></a>
 
38
<FONT color="green">035</FONT>         * &lt;p&gt;<a name="line.35"></a>
 
39
<FONT color="green">036</FONT>         * (This constant is provided as both an implementation convenience and to allow Javadoc to pick<a name="line.36"></a>
 
40
<FONT color="green">037</FONT>         * up the value for the constant values page.)<a name="line.37"></a>
 
41
<FONT color="green">038</FONT>         * &lt;/p&gt;<a name="line.38"></a>
 
42
<FONT color="green">039</FONT>         * <a name="line.39"></a>
 
43
<FONT color="green">040</FONT>         * @see #US_ENGLISH_MAPPING<a name="line.40"></a>
 
44
<FONT color="green">041</FONT>         */<a name="line.41"></a>
 
45
<FONT color="green">042</FONT>        public static final String US_ENGLISH_MAPPING_STRING = "01230120022455012623010202";<a name="line.42"></a>
 
46
<FONT color="green">043</FONT>    <a name="line.43"></a>
 
47
<FONT color="green">044</FONT>        /**<a name="line.44"></a>
 
48
<FONT color="green">045</FONT>         * This is a default mapping of the 26 letters used in US English. A value of &lt;code&gt;0&lt;/code&gt; for a letter position<a name="line.45"></a>
 
49
<FONT color="green">046</FONT>         * means do not encode.<a name="line.46"></a>
 
50
<FONT color="green">047</FONT>         * <a name="line.47"></a>
 
51
<FONT color="green">048</FONT>         * @see Soundex#Soundex(char[])<a name="line.48"></a>
 
52
<FONT color="green">049</FONT>         */<a name="line.49"></a>
 
53
<FONT color="green">050</FONT>        public static final char[] US_ENGLISH_MAPPING = US_ENGLISH_MAPPING_STRING.toCharArray();<a name="line.50"></a>
 
54
<FONT color="green">051</FONT>    <a name="line.51"></a>
 
55
<FONT color="green">052</FONT>        /**<a name="line.52"></a>
 
56
<FONT color="green">053</FONT>         * An instance of Soundex using the US_ENGLISH_MAPPING mapping.<a name="line.53"></a>
 
57
<FONT color="green">054</FONT>         * <a name="line.54"></a>
 
58
<FONT color="green">055</FONT>         * @see #US_ENGLISH_MAPPING<a name="line.55"></a>
 
59
<FONT color="green">056</FONT>         */<a name="line.56"></a>
 
60
<FONT color="green">057</FONT>        public static final Soundex US_ENGLISH = new Soundex();<a name="line.57"></a>
 
61
<FONT color="green">058</FONT>    <a name="line.58"></a>
 
62
<FONT color="green">059</FONT>    <a name="line.59"></a>
 
63
<FONT color="green">060</FONT>        /**<a name="line.60"></a>
 
64
<FONT color="green">061</FONT>         * Encodes the Strings and returns the number of characters in the two encoded Strings that are the same. This<a name="line.61"></a>
 
65
<FONT color="green">062</FONT>         * return value ranges from 0 through 4: 0 indicates little or no similarity, and 4 indicates strong similarity or<a name="line.62"></a>
 
66
<FONT color="green">063</FONT>         * identical values.<a name="line.63"></a>
 
67
<FONT color="green">064</FONT>         * <a name="line.64"></a>
 
68
<FONT color="green">065</FONT>         * @param s1<a name="line.65"></a>
 
69
<FONT color="green">066</FONT>         *                  A String that will be encoded and compared.<a name="line.66"></a>
 
70
<FONT color="green">067</FONT>         * @param s2<a name="line.67"></a>
 
71
<FONT color="green">068</FONT>         *                  A String that will be encoded and compared.<a name="line.68"></a>
 
72
<FONT color="green">069</FONT>         * @return The number of characters in the two encoded Strings that are the same from 0 to 4.<a name="line.69"></a>
 
73
<FONT color="green">070</FONT>         * <a name="line.70"></a>
 
74
<FONT color="green">071</FONT>         * @see SoundexUtils#difference(StringEncoder,String,String)<a name="line.71"></a>
 
75
<FONT color="green">072</FONT>         * @see &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_8co5.asp"&gt; MS<a name="line.72"></a>
 
76
<FONT color="green">073</FONT>         *          T-SQL DIFFERENCE &lt;/a&gt;<a name="line.73"></a>
 
77
<FONT color="green">074</FONT>         * <a name="line.74"></a>
 
78
<FONT color="green">075</FONT>         * @throws EncoderException<a name="line.75"></a>
 
79
<FONT color="green">076</FONT>         *                  if an error occurs encoding one of the strings<a name="line.76"></a>
 
80
<FONT color="green">077</FONT>         * @since 1.3<a name="line.77"></a>
 
81
<FONT color="green">078</FONT>         */<a name="line.78"></a>
 
82
<FONT color="green">079</FONT>        public int difference(String s1, String s2) throws EncoderException {<a name="line.79"></a>
 
83
<FONT color="green">080</FONT>            return SoundexUtils.difference(this, s1, s2);<a name="line.80"></a>
 
84
<FONT color="green">081</FONT>        }<a name="line.81"></a>
 
85
<FONT color="green">082</FONT>    <a name="line.82"></a>
 
86
<FONT color="green">083</FONT>        /**<a name="line.83"></a>
 
87
<FONT color="green">084</FONT>         * The maximum length of a Soundex code - Soundex codes are only four characters by definition.<a name="line.84"></a>
 
88
<FONT color="green">085</FONT>         * <a name="line.85"></a>
 
89
<FONT color="green">086</FONT>         * @deprecated This feature is not needed since the encoding size must be constant. Will be removed in 2.0.<a name="line.86"></a>
 
90
<FONT color="green">087</FONT>         */<a name="line.87"></a>
 
91
<FONT color="green">088</FONT>        private int maxLength = 4;<a name="line.88"></a>
 
92
<FONT color="green">089</FONT>    <a name="line.89"></a>
 
93
<FONT color="green">090</FONT>        /**<a name="line.90"></a>
 
94
<FONT color="green">091</FONT>         * Every letter of the alphabet is "mapped" to a numerical value. This char array holds the values to which each<a name="line.91"></a>
 
95
<FONT color="green">092</FONT>         * letter is mapped. This implementation contains a default map for US_ENGLISH<a name="line.92"></a>
 
96
<FONT color="green">093</FONT>         */<a name="line.93"></a>
 
97
<FONT color="green">094</FONT>        private final char[] soundexMapping;<a name="line.94"></a>
 
98
<FONT color="green">095</FONT>    <a name="line.95"></a>
 
99
<FONT color="green">096</FONT>        /**<a name="line.96"></a>
 
100
<FONT color="green">097</FONT>         * Creates an instance using US_ENGLISH_MAPPING<a name="line.97"></a>
 
101
<FONT color="green">098</FONT>         * <a name="line.98"></a>
 
102
<FONT color="green">099</FONT>         * @see Soundex#Soundex(char[])<a name="line.99"></a>
 
103
<FONT color="green">100</FONT>         * @see Soundex#US_ENGLISH_MAPPING<a name="line.100"></a>
 
104
<FONT color="green">101</FONT>         */<a name="line.101"></a>
 
105
<FONT color="green">102</FONT>        public Soundex() {<a name="line.102"></a>
 
106
<FONT color="green">103</FONT>            this.soundexMapping = US_ENGLISH_MAPPING;<a name="line.103"></a>
 
107
<FONT color="green">104</FONT>        }<a name="line.104"></a>
 
108
<FONT color="green">105</FONT>    <a name="line.105"></a>
 
109
<FONT color="green">106</FONT>        /**<a name="line.106"></a>
 
110
<FONT color="green">107</FONT>         * Creates a soundex instance using the given mapping. This constructor can be used to provide an internationalized<a name="line.107"></a>
 
111
<FONT color="green">108</FONT>         * mapping for a non-Western character set.<a name="line.108"></a>
 
112
<FONT color="green">109</FONT>         * <a name="line.109"></a>
 
113
<FONT color="green">110</FONT>         * Every letter of the alphabet is "mapped" to a numerical value. This char array holds the values to which each<a name="line.110"></a>
 
114
<FONT color="green">111</FONT>         * letter is mapped. This implementation contains a default map for US_ENGLISH<a name="line.111"></a>
 
115
<FONT color="green">112</FONT>         * <a name="line.112"></a>
 
116
<FONT color="green">113</FONT>         * @param mapping<a name="line.113"></a>
 
117
<FONT color="green">114</FONT>         *                  Mapping array to use when finding the corresponding code for a given character<a name="line.114"></a>
 
118
<FONT color="green">115</FONT>         */<a name="line.115"></a>
 
119
<FONT color="green">116</FONT>        public Soundex(char[] mapping) {<a name="line.116"></a>
 
120
<FONT color="green">117</FONT>            this.soundexMapping = new char[mapping.length];<a name="line.117"></a>
 
121
<FONT color="green">118</FONT>            System.arraycopy(mapping, 0, this.soundexMapping, 0, mapping.length);<a name="line.118"></a>
 
122
<FONT color="green">119</FONT>        }<a name="line.119"></a>
 
123
<FONT color="green">120</FONT>    <a name="line.120"></a>
 
124
<FONT color="green">121</FONT>        /**<a name="line.121"></a>
 
125
<FONT color="green">122</FONT>         * Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping,<a name="line.122"></a>
 
126
<FONT color="green">123</FONT>         * and/or possibly provide an internationalized mapping for a non-Western character set.<a name="line.123"></a>
 
127
<FONT color="green">124</FONT>         * <a name="line.124"></a>
 
128
<FONT color="green">125</FONT>         * @param mapping<a name="line.125"></a>
 
129
<FONT color="green">126</FONT>         *            Mapping string to use when finding the corresponding code for a given character<a name="line.126"></a>
 
130
<FONT color="green">127</FONT>         * @since 1.4<a name="line.127"></a>
 
131
<FONT color="green">128</FONT>         */<a name="line.128"></a>
 
132
<FONT color="green">129</FONT>        public Soundex(String mapping) {<a name="line.129"></a>
 
133
<FONT color="green">130</FONT>            this.soundexMapping = mapping.toCharArray();<a name="line.130"></a>
 
134
<FONT color="green">131</FONT>        }<a name="line.131"></a>
 
135
<FONT color="green">132</FONT>    <a name="line.132"></a>
 
136
<FONT color="green">133</FONT>        /**<a name="line.133"></a>
 
137
<FONT color="green">134</FONT>         * Encodes an Object using the soundex algorithm. This method is provided in order to satisfy the requirements of<a name="line.134"></a>
 
138
<FONT color="green">135</FONT>         * the Encoder interface, and will throw an EncoderException if the supplied object is not of type java.lang.String.<a name="line.135"></a>
 
139
<FONT color="green">136</FONT>         * <a name="line.136"></a>
 
140
<FONT color="green">137</FONT>         * @param pObject<a name="line.137"></a>
 
141
<FONT color="green">138</FONT>         *                  Object to encode<a name="line.138"></a>
 
142
<FONT color="green">139</FONT>         * @return An object (or type java.lang.String) containing the soundex code which corresponds to the String<a name="line.139"></a>
 
143
<FONT color="green">140</FONT>         *             supplied.<a name="line.140"></a>
 
144
<FONT color="green">141</FONT>         * @throws EncoderException<a name="line.141"></a>
 
145
<FONT color="green">142</FONT>         *                  if the parameter supplied is not of type java.lang.String<a name="line.142"></a>
 
146
<FONT color="green">143</FONT>         * @throws IllegalArgumentException<a name="line.143"></a>
 
147
<FONT color="green">144</FONT>         *                  if a character is not mapped<a name="line.144"></a>
 
148
<FONT color="green">145</FONT>         */<a name="line.145"></a>
 
149
<FONT color="green">146</FONT>        public Object encode(Object pObject) throws EncoderException {<a name="line.146"></a>
 
150
<FONT color="green">147</FONT>            if (!(pObject instanceof String)) {<a name="line.147"></a>
 
151
<FONT color="green">148</FONT>                throw new EncoderException("Parameter supplied to Soundex encode is not of type java.lang.String");<a name="line.148"></a>
 
152
<FONT color="green">149</FONT>            }<a name="line.149"></a>
 
153
<FONT color="green">150</FONT>            return soundex((String) pObject);<a name="line.150"></a>
 
154
<FONT color="green">151</FONT>        }<a name="line.151"></a>
 
155
<FONT color="green">152</FONT>    <a name="line.152"></a>
 
156
<FONT color="green">153</FONT>        /**<a name="line.153"></a>
 
157
<FONT color="green">154</FONT>         * Encodes a String using the soundex algorithm.<a name="line.154"></a>
 
158
<FONT color="green">155</FONT>         * <a name="line.155"></a>
 
159
<FONT color="green">156</FONT>         * @param pString<a name="line.156"></a>
 
160
<FONT color="green">157</FONT>         *                  A String object to encode<a name="line.157"></a>
 
161
<FONT color="green">158</FONT>         * @return A Soundex code corresponding to the String supplied<a name="line.158"></a>
 
162
<FONT color="green">159</FONT>         * @throws IllegalArgumentException<a name="line.159"></a>
 
163
<FONT color="green">160</FONT>         *                  if a character is not mapped<a name="line.160"></a>
 
164
<FONT color="green">161</FONT>         */<a name="line.161"></a>
 
165
<FONT color="green">162</FONT>        public String encode(String pString) {<a name="line.162"></a>
 
166
<FONT color="green">163</FONT>            return soundex(pString);<a name="line.163"></a>
 
167
<FONT color="green">164</FONT>        }<a name="line.164"></a>
 
168
<FONT color="green">165</FONT>    <a name="line.165"></a>
 
169
<FONT color="green">166</FONT>        /**<a name="line.166"></a>
 
170
<FONT color="green">167</FONT>         * Used internally by the SoundEx algorithm.<a name="line.167"></a>
 
171
<FONT color="green">168</FONT>         * <a name="line.168"></a>
 
172
<FONT color="green">169</FONT>         * Consonants from the same code group separated by W or H are treated as one.<a name="line.169"></a>
 
173
<FONT color="green">170</FONT>         * <a name="line.170"></a>
 
174
<FONT color="green">171</FONT>         * @param str<a name="line.171"></a>
 
175
<FONT color="green">172</FONT>         *                  the cleaned working string to encode (in upper case).<a name="line.172"></a>
 
176
<FONT color="green">173</FONT>         * @param index<a name="line.173"></a>
 
177
<FONT color="green">174</FONT>         *                  the character position to encode<a name="line.174"></a>
 
178
<FONT color="green">175</FONT>         * @return Mapping code for a particular character<a name="line.175"></a>
 
179
<FONT color="green">176</FONT>         * @throws IllegalArgumentException<a name="line.176"></a>
 
180
<FONT color="green">177</FONT>         *                  if the character is not mapped<a name="line.177"></a>
 
181
<FONT color="green">178</FONT>         */<a name="line.178"></a>
 
182
<FONT color="green">179</FONT>        private char getMappingCode(String str, int index) {<a name="line.179"></a>
 
183
<FONT color="green">180</FONT>            // map() throws IllegalArgumentException<a name="line.180"></a>
 
184
<FONT color="green">181</FONT>            char mappedChar = this.map(str.charAt(index));<a name="line.181"></a>
 
185
<FONT color="green">182</FONT>            // HW rule check<a name="line.182"></a>
 
186
<FONT color="green">183</FONT>            if (index &gt; 1 &amp;&amp; mappedChar != '0') {<a name="line.183"></a>
 
187
<FONT color="green">184</FONT>                char hwChar = str.charAt(index - 1);<a name="line.184"></a>
 
188
<FONT color="green">185</FONT>                if ('H' == hwChar || 'W' == hwChar) {<a name="line.185"></a>
 
189
<FONT color="green">186</FONT>                    char preHWChar = str.charAt(index - 2);<a name="line.186"></a>
 
190
<FONT color="green">187</FONT>                    char firstCode = this.map(preHWChar);<a name="line.187"></a>
 
191
<FONT color="green">188</FONT>                    if (firstCode == mappedChar || 'H' == preHWChar || 'W' == preHWChar) {<a name="line.188"></a>
 
192
<FONT color="green">189</FONT>                        return 0;<a name="line.189"></a>
 
193
<FONT color="green">190</FONT>                    }<a name="line.190"></a>
 
194
<FONT color="green">191</FONT>                }<a name="line.191"></a>
 
195
<FONT color="green">192</FONT>            }<a name="line.192"></a>
 
196
<FONT color="green">193</FONT>            return mappedChar;<a name="line.193"></a>
 
197
<FONT color="green">194</FONT>        }<a name="line.194"></a>
 
198
<FONT color="green">195</FONT>    <a name="line.195"></a>
 
199
<FONT color="green">196</FONT>        /**<a name="line.196"></a>
 
200
<FONT color="green">197</FONT>         * Returns the maxLength. Standard Soundex<a name="line.197"></a>
 
201
<FONT color="green">198</FONT>         * <a name="line.198"></a>
 
202
<FONT color="green">199</FONT>         * @deprecated This feature is not needed since the encoding size must be constant. Will be removed in 2.0.<a name="line.199"></a>
 
203
<FONT color="green">200</FONT>         * @return int<a name="line.200"></a>
 
204
<FONT color="green">201</FONT>         */<a name="line.201"></a>
 
205
<FONT color="green">202</FONT>        public int getMaxLength() {<a name="line.202"></a>
 
206
<FONT color="green">203</FONT>            return this.maxLength;<a name="line.203"></a>
 
207
<FONT color="green">204</FONT>        }<a name="line.204"></a>
 
208
<FONT color="green">205</FONT>    <a name="line.205"></a>
 
209
<FONT color="green">206</FONT>        /**<a name="line.206"></a>
 
210
<FONT color="green">207</FONT>         * Returns the soundex mapping.<a name="line.207"></a>
 
211
<FONT color="green">208</FONT>         * <a name="line.208"></a>
 
212
<FONT color="green">209</FONT>         * @return soundexMapping.<a name="line.209"></a>
 
213
<FONT color="green">210</FONT>         */<a name="line.210"></a>
 
214
<FONT color="green">211</FONT>        private char[] getSoundexMapping() {<a name="line.211"></a>
 
215
<FONT color="green">212</FONT>            return this.soundexMapping;<a name="line.212"></a>
 
216
<FONT color="green">213</FONT>        }<a name="line.213"></a>
 
217
<FONT color="green">214</FONT>    <a name="line.214"></a>
 
218
<FONT color="green">215</FONT>        /**<a name="line.215"></a>
 
219
<FONT color="green">216</FONT>         * Maps the given upper-case character to its Soundex code.<a name="line.216"></a>
 
220
<FONT color="green">217</FONT>         * <a name="line.217"></a>
 
221
<FONT color="green">218</FONT>         * @param ch<a name="line.218"></a>
 
222
<FONT color="green">219</FONT>         *                  An upper-case character.<a name="line.219"></a>
 
223
<FONT color="green">220</FONT>         * @return A Soundex code.<a name="line.220"></a>
 
224
<FONT color="green">221</FONT>         * @throws IllegalArgumentException<a name="line.221"></a>
 
225
<FONT color="green">222</FONT>         *                  Thrown if &lt;code&gt;ch&lt;/code&gt; is not mapped.<a name="line.222"></a>
 
226
<FONT color="green">223</FONT>         */<a name="line.223"></a>
 
227
<FONT color="green">224</FONT>        private char map(char ch) {<a name="line.224"></a>
 
228
<FONT color="green">225</FONT>            int index = ch - 'A';<a name="line.225"></a>
 
229
<FONT color="green">226</FONT>            if (index &lt; 0 || index &gt;= this.getSoundexMapping().length) {<a name="line.226"></a>
 
230
<FONT color="green">227</FONT>                throw new IllegalArgumentException("The character is not mapped: " + ch);<a name="line.227"></a>
 
231
<FONT color="green">228</FONT>            }<a name="line.228"></a>
 
232
<FONT color="green">229</FONT>            return this.getSoundexMapping()[index];<a name="line.229"></a>
 
233
<FONT color="green">230</FONT>        }<a name="line.230"></a>
 
234
<FONT color="green">231</FONT>    <a name="line.231"></a>
 
235
<FONT color="green">232</FONT>        /**<a name="line.232"></a>
 
236
<FONT color="green">233</FONT>         * Sets the maxLength.<a name="line.233"></a>
 
237
<FONT color="green">234</FONT>         * <a name="line.234"></a>
 
238
<FONT color="green">235</FONT>         * @deprecated This feature is not needed since the encoding size must be constant. Will be removed in 2.0.<a name="line.235"></a>
 
239
<FONT color="green">236</FONT>         * @param maxLength<a name="line.236"></a>
 
240
<FONT color="green">237</FONT>         *                  The maxLength to set<a name="line.237"></a>
 
241
<FONT color="green">238</FONT>         */<a name="line.238"></a>
 
242
<FONT color="green">239</FONT>        public void setMaxLength(int maxLength) {<a name="line.239"></a>
 
243
<FONT color="green">240</FONT>            this.maxLength = maxLength;<a name="line.240"></a>
 
244
<FONT color="green">241</FONT>        }<a name="line.241"></a>
 
245
<FONT color="green">242</FONT>    <a name="line.242"></a>
 
246
<FONT color="green">243</FONT>        /**<a name="line.243"></a>
 
247
<FONT color="green">244</FONT>         * Retrieves the Soundex code for a given String object.<a name="line.244"></a>
 
248
<FONT color="green">245</FONT>         * <a name="line.245"></a>
 
249
<FONT color="green">246</FONT>         * @param str<a name="line.246"></a>
 
250
<FONT color="green">247</FONT>         *                  String to encode using the Soundex algorithm<a name="line.247"></a>
 
251
<FONT color="green">248</FONT>         * @return A soundex code for the String supplied<a name="line.248"></a>
 
252
<FONT color="green">249</FONT>         * @throws IllegalArgumentException<a name="line.249"></a>
 
253
<FONT color="green">250</FONT>         *                  if a character is not mapped<a name="line.250"></a>
 
254
<FONT color="green">251</FONT>         */<a name="line.251"></a>
 
255
<FONT color="green">252</FONT>        public String soundex(String str) {<a name="line.252"></a>
 
256
<FONT color="green">253</FONT>            if (str == null) {<a name="line.253"></a>
 
257
<FONT color="green">254</FONT>                return null;<a name="line.254"></a>
 
258
<FONT color="green">255</FONT>            }<a name="line.255"></a>
 
259
<FONT color="green">256</FONT>            str = SoundexUtils.clean(str);<a name="line.256"></a>
 
260
<FONT color="green">257</FONT>            if (str.length() == 0) {<a name="line.257"></a>
 
261
<FONT color="green">258</FONT>                return str;<a name="line.258"></a>
 
262
<FONT color="green">259</FONT>            }<a name="line.259"></a>
 
263
<FONT color="green">260</FONT>            char out[] = {'0', '0', '0', '0'};<a name="line.260"></a>
 
264
<FONT color="green">261</FONT>            char last, mapped;<a name="line.261"></a>
 
265
<FONT color="green">262</FONT>            int incount = 1, count = 1;<a name="line.262"></a>
 
266
<FONT color="green">263</FONT>            out[0] = str.charAt(0);<a name="line.263"></a>
 
267
<FONT color="green">264</FONT>            // getMappingCode() throws IllegalArgumentException<a name="line.264"></a>
 
268
<FONT color="green">265</FONT>            last = getMappingCode(str, 0);<a name="line.265"></a>
 
269
<FONT color="green">266</FONT>            while ((incount &lt; str.length()) &amp;&amp; (count &lt; out.length)) {<a name="line.266"></a>
 
270
<FONT color="green">267</FONT>                mapped = getMappingCode(str, incount++);<a name="line.267"></a>
 
271
<FONT color="green">268</FONT>                if (mapped != 0) {<a name="line.268"></a>
 
272
<FONT color="green">269</FONT>                    if ((mapped != '0') &amp;&amp; (mapped != last)) {<a name="line.269"></a>
 
273
<FONT color="green">270</FONT>                        out[count++] = mapped;<a name="line.270"></a>
 
274
<FONT color="green">271</FONT>                    }<a name="line.271"></a>
 
275
<FONT color="green">272</FONT>                    last = mapped;<a name="line.272"></a>
 
276
<FONT color="green">273</FONT>                }<a name="line.273"></a>
 
277
<FONT color="green">274</FONT>            }<a name="line.274"></a>
 
278
<FONT color="green">275</FONT>            return new String(out);<a name="line.275"></a>
 
279
<FONT color="green">276</FONT>        }<a name="line.276"></a>
 
280
<FONT color="green">277</FONT>    <a name="line.277"></a>
 
281
<FONT color="green">278</FONT>    }<a name="line.278"></a>
 
282
 
 
283
 
 
284
 
 
285
 
 
286
 
 
287
 
 
288
 
 
289
 
 
290
 
 
291
 
 
292
 
 
293
 
 
294
 
 
295
 
 
296
 
 
297
 
 
298
 
 
299
 
 
300
 
 
301
 
 
302
 
 
303
 
 
304
 
 
305
 
 
306
 
 
307
 
 
308
 
 
309
 
 
310
 
 
311
 
 
312
 
 
313
 
 
314
 
 
315
 
 
316
 
 
317
 
 
318
 
 
319
 
 
320
 
 
321
 
 
322
 
 
323
 
 
324
 
 
325
 
 
326
 
 
327
 
 
328
 
 
329
 
 
330
 
 
331
 
 
332
 
 
333
 
 
334
 
 
335
 
 
336
 
 
337
 
 
338
 
 
339
 
 
340
 
 
341
 
 
342
</PRE>
 
343
</BODY>
 
344
</HTML>