1 package org.jahia.clipbuilder.html.util; 2 import org.apache.commons.lang.StringUtils; 3 import org.htmlparser.util.Translate; 4 9 public abstract class StringUtilities { 10 private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(StringUtilities.class); 11 12 13 16 public StringUtilities() { 17 } 18 19 20 29 public static String getBestMatchString(String where, String pattern, char separator) { 30 if (pattern == null || pattern.equalsIgnoreCase("")) { 31 return ""; 32 } 33 34 logger.debug("[ where = " + where + " ]"); 36 logger.debug("[ pattern = " + pattern + " ]"); 37 String resultString = ""; 38 39 Object [] res = getBestMatch(where, pattern, separator); 41 42 resultString = (String ) res[0]; 43 44 return resultString; 45 } 46 47 48 49 56 public static int distance(String s, String t) { 57 return StringUtils.getLevenshteinDistance(s, t); 58 113 } 114 115 116 122 public static String replaceSpecialGraphics(String s) { 123 if (s == null) { 124 return null; 125 } 126 148 Object [][] specialGraphic = { 149 { 150 "&", "&"} 151 }; 152 153 for (int i = 0; i < specialGraphic.length; i++) { 154 s = s.replaceAll((String ) specialGraphic[i][0], (String ) specialGraphic[i][1]); 155 } 156 return s; 157 } 158 159 160 166 public static String escapeHTML(String s) { 167 StringBuffer sb = new StringBuffer (); 168 int n = s.length(); 169 for (int i = 0; i < n; i++) { 170 char c = s.charAt(i); 171 switch (c) { 172 case 'à': 173 sb.append("à"); 174 break; 175 case 'À': 176 sb.append("À"); 177 break; 178 case 'â': 179 sb.append("â"); 180 break; 181 case 'Â': 182 sb.append("Â"); 183 break; 184 case 'ä': 185 sb.append("ä"); 186 break; 187 case 'Ä': 188 sb.append("Ä"); 189 break; 190 case 'å': 191 sb.append("å"); 192 break; 193 case 'Å': 194 sb.append("Å"); 195 break; 196 case 'æ': 197 sb.append("æ"); 198 break; 199 case 'Æ': 200 sb.append("Æ"); 201 break; 202 case 'ç': 203 sb.append("ç"); 204 break; 205 case 'Ç': 206 sb.append("Ç"); 207 break; 208 case 'é': 209 sb.append("é"); 210 break; 211 case 'É': 212 sb.append("É"); 213 break; 214 case 'è': 215 sb.append("è"); 216 break; 217 case 'È': 218 sb.append("È"); 219 break; 220 case 'ê': 221 sb.append("ê"); 222 break; 223 case 'Ê': 224 sb.append("Ê"); 225 break; 226 case 'ë': 227 sb.append("ë"); 228 break; 229 case 'Ë': 230 sb.append("Ë"); 231 break; 232 case 'ï': 233 sb.append("ï"); 234 break; 235 case 'Ï': 236 sb.append("Ï"); 237 break; 238 case 'ô': 239 sb.append("ô"); 240 break; 241 case 'Ô': 242 sb.append("Ô"); 243 break; 244 case 'ö': 245 sb.append("ö"); 246 break; 247 case 'Ö': 248 sb.append("Ö"); 249 break; 250 case 'ø': 251 sb.append("ø"); 252 break; 253 case 'Ø': 254 sb.append("Ø"); 255 break; 256 case 'ß': 257 sb.append("ß"); 258 break; 259 case 'ù': 260 sb.append("ù"); 261 break; 262 case 'Ù': 263 sb.append("Ù"); 264 break; 265 case 'û': 266 sb.append("û"); 267 break; 268 case 'Û': 269 sb.append("Û"); 270 break; 271 case 'ü': 272 sb.append("ü"); 273 break; 274 case 'Ü': 275 sb.append("Ü"); 276 break; 277 case '®': 278 sb.append("®"); 279 break; 280 case '©': 281 sb.append("©"); 282 break; 283 case '€': 284 sb.append("€"); 285 break; 286 288 291 default: 292 sb.append(c); 293 break; 294 } 295 } 296 return sb.toString(); 297 } 298 299 300 306 public static String repareHTML(String s) { 307 s = replaceSpecialGraphics(s); 308 s = escapeHTML(s); 309 return s; 310 } 311 312 313 314 322 private static Object [] getBestMatch(String where, String pattern, char separator) { 323 if (pattern == null || pattern.equalsIgnoreCase("")) { 325 return null; 326 } 327 328 String result = "Not set"; 330 333 int patternSize = pattern.length(); 335 logger.debug("patterLastIndex : " + patternSize); 336 int whereSize = where.length(); 338 339 if (patternSize > (whereSize)) { 341 Object [] res = new Object [2]; 342 res[0] = where; 343 res[1] = new Integer (distance(where, pattern)); 344 return res; 345 } 346 logger.debug("whereLastIndex : " + whereSize); 347 int lastFirstIndex = whereSize - patternSize; 349 logger.debug("lastFirstIndex : " + lastFirstIndex); 350 int resultDistance = Integer.MAX_VALUE; 351 352 for (int i = 0; i <= lastFirstIndex; ) { 354 String subString = where.substring(i, i + patternSize); 355 int currentDistance = distance(subString, pattern); 357 if (currentDistance < resultDistance) { 358 result = subString; 359 resultDistance = currentDistance; 360 361 } 362 363 365 i = i + subString.substring(1).indexOf(separator) + 1; 366 if (i == -1) { 367 break; 368 } 369 } 371 372 Object [] res = new Object [3]; 373 res[0] = result; 374 res[1] = new Integer (resultDistance); 375 376 return res; 377 } 378 379 380 388 private static int minimum(int a, int b, int c) { 389 int mi; 390 391 mi = a; 392 if (b < mi) { 393 mi = b; 394 } 395 if (c < mi) { 396 mi = c; 397 } 398 return mi; 399 } 400 401 } 402 | Popular Tags |