| 1 64 65 package com.jcorporate.expresso.core.misc; 66 67 import com.jcorporate.expresso.kernel.util.FastStringBuffer; 68 69 import java.io.PrintWriter ; 70 import java.io.StringWriter ; 71 import java.math.BigDecimal ; 72 import java.math.BigInteger ; 73 import java.util.Hashtable ; 74 import java.util.List ; 75 import java.util.Random ; 76 import java.util.StringTokenizer ; 77 import java.util.Vector ; 78 79 80 86 public final class StringUtil { 87 public static final String EMPTY_STRING = ""; 88 89 90 99 public static final void assertNotBlank(String theString, String theMessage) { 100 if (theString == null) { 101 throw new IllegalArgumentException ("Null argument not allowed: " + 102 theMessage); 103 } 104 if (theString.trim().equals(EMPTY_STRING)) { 105 throw new IllegalArgumentException ("Blank argument not allowed: " + 106 theMessage); 107 } 108 } 109 110 116 public static final String notNull(String theString) { 117 if (theString == null) { 118 return EMPTY_STRING; 119 } 120 121 return theString; 122 } 123 124 125 132 public static final void assertBoolean(String theString, String theMessage) { 133 assertNotBlank(theString, theMessage); 134 135 if (!(theString.equalsIgnoreCase("yes") || 136 theString.equalsIgnoreCase("true") || 137 theString.equalsIgnoreCase("no") || 138 theString.equalsIgnoreCase("false") || 139 theString.equals("1") || 140 theString.equals("0") || 141 theString.equalsIgnoreCase("y") || 142 theString.equalsIgnoreCase("n"))) { 143 throw new IllegalArgumentException (theMessage); 144 } 145 } 146 147 153 public static final boolean toBoolean(String theString) { 154 boolean result = false; 155 if (theString != null) { 156 result = theString.equalsIgnoreCase("true") 158 || theString.equals("1") 159 || theString.equalsIgnoreCase("yes") 160 || theString.equalsIgnoreCase("y") 161 || theString.equalsIgnoreCase("on") 162 || theString.equalsIgnoreCase("set"); 163 } 164 165 return result; 166 } 167 168 174 public static String notNull(SerializableString theString) { 175 if (theString == null) { 176 return EMPTY_STRING; 177 } 178 179 return theString.toString(); 180 } 181 182 195 public static String numberToLetter(int number, boolean upperCaseFlag) 196 throws IllegalArgumentException { 197 198 if (number < 1 || number > 26) { 200 throw new IllegalArgumentException ("The number is out of the proper range (1 to " + 201 "26) to be converted to a letter."); 202 } 203 204 int modnumber = number + 9; 205 char thechar = Character.forDigit(modnumber, 36); 206 207 if (upperCaseFlag) { 208 thechar = Character.toUpperCase(thechar); 209 } 210 211 return "" + thechar; 212 } 213 214 215 223 public static String replace(String s, String sub, String with) { 224 if (s == null) { 225 return null; 226 } 227 int c = 0; 228 int i = s.indexOf(sub, c); 229 230 if (i == -1) { 231 return s; 232 } 233 234 FastStringBuffer buf = new FastStringBuffer(s.length() + with.length()); 235 236 do { 237 buf.append(s.substring(c, i)); 238 buf.append(with); 239 c = i + sub.length(); 240 } while ((i = s.indexOf(sub, c)) != -1); 241 242 if (c < s.length()) { 243 buf.append(s.substring(c, s.length())); 244 } 245 246 return buf.toString(); 247 } 248 249 257 public static String xmlEscape(String s) { 258 int length = s.length(); 259 FastStringBuffer fsb = new FastStringBuffer(length); 260 261 for (int i = 0; i < length; i++) { 262 fsb = printEscaped(s.charAt(i), fsb); 263 } 264 265 return fsb.toString(); 266 } 267 268 275 protected static FastStringBuffer printEscaped(char ch, 276 FastStringBuffer fsb) { 277 String charRef; 278 279 charRef = getEntityRef(ch); 284 285 if (charRef != null) { 286 fsb.append('&'); 287 fsb.append(charRef); 288 fsb.append(';'); 289 290 } else if ((ch >= ' ' && ch < 0xFF && ch != 0xF7) || ch == '\n' || 292 ch == '\r' || ch == '\t') { 293 294 if (ch < 0x10000) { 298 fsb.append(ch); 299 } else { 300 fsb.append((char) ((((int) ch - 0x10000) >> 10) + 0xd800)); 301 fsb.append((char) ((((int) ch - 0x10000) & 0x3ff) + 0xdc00)); 302 } 303 } else { 304 fsb.append("&#x"); 305 fsb.append(Integer.toHexString(ch)); 306 fsb.append(';'); 307 } 308 309 return fsb; 310 } 311 312 319 protected static String getEntityRef(int ch) { 320 321 switch (ch) { 324 case '<': 325 return "lt"; 326 327 case '>': 328 return "gt"; 329 330 case '"': 331 return "quot"; 332 333 case '\'': 334 return "apos"; 335 336 case '&': 337 return "amp"; 338 } 339 340 return null; 341 } 342 343 347 public static final String ELLIPSES = "…"; 348 349 358 public static String truncate(String str, int len) { 359 String result = str; 360 if (str.length() > len) { 361 result = str.substring(0, len) + ELLIPSES; 362 } 363 return result; 364 } 365 366 367 374 public static Hashtable characterMap() { 375 Hashtable characterMap = new Hashtable (); 376 377 characterMap.put(new Character ('à'), new Character ('a')); 378 characterMap.put(new Character ('â'), new Character ('a')); 379 characterMap.put(new Character ('ä'), new Character ('a')); 380 characterMap.put(new Character ('á'), new Character ('a')); 381 characterMap.put(new Character ('À'), new Character ('A')); 382 characterMap.put(new Character ('Á'), new Character ('A')); 383 characterMap.put(new Character ('Â'), new Character ('A')); 384 characterMap.put(new Character ('Ä'), new Character ('A')); 385 characterMap.put(new Character ('è'), new Character ('e')); 386 characterMap.put(new Character ('é'), new Character ('e')); 387 characterMap.put(new Character ('ê'), new Character ('e')); 388 characterMap.put(new Character ('ë'), new Character ('e')); 389 characterMap.put(new Character ('È'), new Character ('E')); 390 characterMap.put(new Character ('É'), new Character ('E')); 391 characterMap.put(new Character ('Ê'), new Character ('E')); 392 characterMap.put(new Character ('Ë'), new Character ('E')); 393 characterMap.put(new Character ('î'), new Character ('i')); 394 characterMap.put(new Character ('ï'), new Character ('i')); 395 characterMap.put(new Character ('Î'), new Character ('I')); 396 characterMap.put(new Character ('Ï'), new Character ('I')); 397 characterMap.put(new Character ('ô'), new Character ('o')); 398 characterMap.put(new Character ('ö'), new Character ('o')); 399 characterMap.put(new Character ('Ô'), new Character ('O')); 400 characterMap.put(new Character ('Ö'), new Character ('O')); 401 characterMap.put(new Character ('û'), new Character ('u')); 402 characterMap.put(new Character ('ü'), new Character ('u')); 403 characterMap.put(new Character ('Û'), new Character ('U')); 404 characterMap.put(new Character ('Ü'), new Character ('U')); 405 characterMap.put(new Character ('ç'), new Character ('c')); 406 characterMap.put(new Character ('Ç'), new Character ('C')); 407 408 return characterMap; 409 } 410 411 420 public static String removeAccents(String s) { 421 String out = null; 422 if (s != null) { 423 Hashtable charRemove = characterMap(); 424 StringBuffer sb = new StringBuffer (); 425 for (int i = 0; i < s.length(); i++) { 426 Character c = new Character (s.charAt(i)); 427 if (charRemove.containsKey(c)) { 428 c = (Character ) charRemove.get(c); 429 } 430 sb.append(c.charValue()); 431 } 432 out = sb.toString(); 433 } 434 return out; 435 } 436 437 438 446 public static String convertCommaToDot(String str) { 447 if (str == null) { 448 return null; 449 } 450 451 return str.replace(',', '.'); 452 } 453 454 463 public static int compareDecimals(String decim1, String decim2) { 464 BigDecimal dec1 = new BigDecimal (decim1); 465 BigDecimal dec2 = new BigDecimal (decim2); 466 return dec1.compareTo(dec2); 467 } 468 469 478 public static int compareIntegers(String int1, String int2) { 479 BigInteger dec1 = new BigInteger (int1); 480 BigInteger dec2 = new BigInteger (int2); 481 return dec1.compareTo(dec2); 482 } 483 484 492 public static boolean isAlphaNumeric(String s) { 493 return isAlphaNumeric(s, ""); 494 } 495 496 505 public static boolean isAlphaNumeric(String str, String otherChars) { 506 String alphaNum = 507 "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + otherChars; 508 for (int i = 0; i < str.length(); i++) { 509 if (alphaNum.indexOf(str.charAt(i)) == -1) { 510 return false; 511 } 512 } 513 return true; 514 } 515 516 524 public static boolean isBlankOrNull(String str) { 525 if (str == null) { 526 return true; 527 } 528 if (str.trim().length() < 1) { 529 return true; 530 } else { 531 return false; 532 } 533 } 534 535 543 public static boolean isDecimal(String s) { 544 try { 545 new BigDecimal (s); 546 return true; 547 } catch (NumberFormatException e) { 548 return false; 549 } 550 } 551 552 560 public static int isEmail(String email) { 561 StringTokenizer st = new StringTokenizer (email, "@"); 562 563 if (st.countTokens() != 2) { 564 return 1; 565 } 566 567 st.nextToken(); 568 if (st.nextToken().indexOf(".") == -1) { 569 return 2; 570 } 571 572 return 0; 573 } 574 575 583 public static boolean isInteger(String str) { 584 try { 585 new BigInteger (str); 586 return true; 587 } catch (NumberFormatException e) { 588 return false; 589 } 590 } 591 592 599 public static boolean isNumber(String str) { 600 try { 601 Double.parseDouble(str); 602 return true; 603 } catch (NumberFormatException ex) { 604 return false; 605 } 606 } 607 608 616 public static boolean isSiren(String siren) { 617 StringBuffer temp = new StringBuffer (""); 618 int value = 0; 619 620 try { 622 Double.parseDouble(siren); 623 } catch (NumberFormatException nbe) { 624 return false; 625 } 626 627 if (siren.length() != 9) { 629 return false; 630 } 631 632 for (int i = 0; i < 9; i++) { 634 int n = 635 Integer.parseInt(siren.substring(i, i + 1)) * (((i % 2) != 0) ? 2 : 1); 636 temp.append(n); 637 } 638 639 for (int i = 0; i < (temp.length()); i++) { 641 value += Integer.parseInt(temp.substring(i, i + 1)); 642 } 643 644 if ((value % 10) != 0) { 646 return false; 647 } 648 649 return true; 650 } 651 652 660 public static boolean isSiret(String siret) { 661 if (siret.length() != 14) { 663 return false; 664 } 665 666 try { 668 Double.parseDouble(siret); 669 return isSiren(siret.substring(0, 9)); 670 } catch (NumberFormatException nfe) { 671 return false; 672 } 673 } 674 675 683 public static String nullToEmpty(String s) { 684 if (s == null) { 685 return ""; 686 } else { 687 return s; 688 } 689 } 690 691 699 public static String reformatDecimalString(String str) { 700 if (str == null) { 701 return null; 702 } 703 704 str = str.replace(',', '.'); 706 try { 707 Double.parseDouble(str); 708 return str; 709 } catch (NumberFormatException nbe) { 710 return ""; 711 } 712 } 713 714 722 public static String convertDotToComma(String str) { 723 return str.replace('.', ','); 724 } 725 726 736 public static String replaceAll(String text, String key, String value) { 737 if (text == null) { 738 return null; 739 } 740 741 String buffer = text; 742 if (buffer != null && key != null && value != null) { 743 int length = key.length(); 744 for (int start = buffer.indexOf(key); 745 start != -1; 746 start = buffer.indexOf(key, start + value.length())) { 747 buffer = buffer.substring(0, start) + value + buffer.substring(start + length); 748 } 749 } 750 return buffer; 751 } 752 753 764 static public String replaceStringOnce(String text, String str1, String str2) { 765 return replaceString(text, str1, str2, 1); 766 } 767 768 778 static public String replaceString(String text, String str1, String str2) { 779 return replaceString(text, str1, str2, -1); 780 } 781 782 |