1 package org.columba.core.util; 19 20 import java.util.ArrayList ; 21 import java.util.List ; 22 import java.util.StringTokenizer ; 23 24 import org.columba.core.resourceloader.GlobalResourceLoader; 25 30 public class NameParser { 31 32 public static void main(String args[]) { 33 String [] testNames = {"Dr. Richard K. Ellington", "Bob Jones", "Ms. Jill Hark", "Robert B. Smith, Esq.", "Johnson, PhD.", 34 "Sue & Gene Stark", "George", "", null}; 35 NameParser parser = NameParser.getInstance(); 36 for (int i = 0; i < testNames.length; i++) { 37 String name = testNames[i]; 38 System.out.println(i +": " +parser.parseDisplayName(name).toString()); 39 } 40 } 41 42 private static final String RESOURCE_PATH = "org.columba.core.i18n.global"; 43 44 45 48 50 private static NameParser _instance; 51 55 public static NameParser getInstance() { 56 if (_instance == null) 57 _instance = new NameParser(); 58 return _instance; 59 } 60 61 62 private final String [] SALUTATIONS; 63 64 private final String [] TITLES; 65 66 69 private NameParser() { 70 71 List <String > salutations = new ArrayList <String >(); 73 String salutationsStr = GlobalResourceLoader.getString(RESOURCE_PATH, "global", "name_parser_salutations"); 74 StringTokenizer st = new StringTokenizer (salutationsStr, ","); 75 while (st.hasMoreTokens()) { 76 salutations.add(st.nextToken()); 77 } 78 SALUTATIONS = salutations.toArray(new String [salutations.size()]); 79 80 List <String > titles = new ArrayList <String >(); 82 String titlesStr = GlobalResourceLoader.getString(RESOURCE_PATH, "global", "name_parser_titles"); 83 st = new StringTokenizer (titlesStr, ","); 84 while (st.hasMoreTokens()) { 85 titles.add(st.nextToken()); 86 } 87 TITLES = titles.toArray(new String [titles.size()]); 88 89 } 90 91 public Name parseDisplayName(String nameInputStr) { 92 93 if (nameInputStr == null) 95 nameInputStr = ""; 96 97 String displayName = nameInputStr; 98 String salutation = null; 99 String firstName = null; 100 String middleName = null; 101 String lastName = null; 102 String title = null; 103 104 salutation = findSalutation(nameInputStr); 106 if (salutation != null) { 107 nameInputStr = nameInputStr.substring(salutation.length()); 109 } 110 111 title = findTitle(nameInputStr); 113 if (title != null) { 114 nameInputStr = nameInputStr.substring(0, nameInputStr.length() - title.length()); 116 nameInputStr = nameInputStr.substring(0, nameInputStr.lastIndexOf(',')); 117 } 118 119 StringTokenizer st = new StringTokenizer (nameInputStr, ", "); 123 List <String > tokens = new ArrayList <String >(); 124 while (st.hasMoreTokens()) { 125 tokens.add(st.nextToken()); 126 } 127 128 boolean commaSpecified = nameInputStr.indexOf(',') >= 0; 129 if (tokens.size() == 0) { 130 } else if (tokens.size() == 1) { 132 lastName = tokens.get(0); 134 } else if (tokens.size() == 2) { 135 if (commaSpecified) { 136 lastName = tokens.get(0); 137 firstName = tokens.get(1); 138 } else { 139 firstName = tokens.get(0); 140 lastName = tokens.get(1); 141 } 142 } else if (tokens.size() == 3) { 143 if (commaSpecified) { 144 lastName = tokens.get(0); 145 firstName = tokens.get(1); 146 middleName = tokens.get(2); 147 } else { 148 firstName = tokens.get(0); 149 middleName = tokens.get(1); 150 lastName = tokens.get(2); 151 } 152 } else { 153 StringBuffer firstSB = new StringBuffer (); 156 lastName = (String )tokens.get(tokens.size()-1); 157 firstName = nameInputStr.substring(0, nameInputStr.length() - lastName.length()).trim(); 158 } 159 160 return new Name(displayName, salutation, firstName, middleName, lastName, title); 161 } 162 163 169 private String findTitle(String nameInputStr) { 170 String title = null; 171 for (String s : TITLES) { 172 if (nameInputStr.endsWith(s)) { 173 title = s; 174 break; 175 } 176 } 177 return title; 178 } 179 180 186 private String findSalutation(String nameInputStr) { 187 String salutation = null; 188 for (String s : SALUTATIONS) { 189 if (nameInputStr.startsWith(s)) { 190 salutation = s; 191 break; 192 } 193 } 194 return salutation; 195 } 196 197 200 public static class Name { 201 private String _displayName; 202 private String _firstName; 203 private String _middleName; 204 private String _lastName; 205 private String _salutation; 206 private String _title; 207 public Name(String displayName, String salutation, String firstName, String middleName, String lastName, String title) { 208 _displayName = displayName; 209 _salutation = salutation; 210 _firstName = firstName; 211 _middleName = middleName; 212 _lastName = lastName; 213 _title = title; 214 } 215 218 public String getDisplayName() { 219 return _displayName; 220 } 221 224 public String getFirstName() { 225 return _firstName; 226 } 227 230 public String getLastName() { 231 return _lastName; 232 } 233 236 public String getMiddleName() { 237 return _middleName; 238 } 239 242 public String getSalutation() { 243 return _salutation; 244 } 245 248 public String getTitle() { 249 return _title; 250 } 251 252 255 public String toString() { 256 StringBuffer sb = new StringBuffer (); 257 if (_salutation != null) { 258 sb.append(_salutation); 259 sb.append(" "); 260 } 261 if (_firstName != null) { 262 sb.append(_firstName); 263 sb.append(" "); 264 } 265 if (_middleName != null) { 266 sb.append(_middleName); 267 sb.append(" "); 268 } 269 if (_lastName != null) { 270 sb.append(_lastName); 271 } 272 if (_title != null) { 273 sb.append(", "); 274 sb.append(_title); 275 } 276 277 return sb.toString(); 278 } 279 } 280 281 } 282 | Popular Tags |