package com.wangyin.ak47.common; /** * String-related helper class * * @author hannyu * */ public class StringUtil2 { private static final char[] lowercases = { '\000','\001','\002','\003','\004','\005','\006','\007', '\010','\011','\012','\013','\014','\015','\016','\017', '\020','\021','\022','\023','\024','\025','\026','\027', '\030','\031','\032','\033','\034','\035','\036','\037', '\040','\041','\042','\043','\044','\045','\046','\047', '\050','\051','\052','\053','\054','\055','\056','\057', '\060','\061','\062','\063','\064','\065','\066','\067', '\070','\071','\072','\073','\074','\075','\076','\077', '\100','\141','\142','\143','\144','\145','\146','\147', '\150','\151','\152','\153','\154','\155','\156','\157', '\160','\161','\162','\163','\164','\165','\166','\167', '\170','\171','\172','\133','\134','\135','\136','\137', '\140','\141','\142','\143','\144','\145','\146','\147', '\150','\151','\152','\153','\154','\155','\156','\157', '\160','\161','\162','\163','\164','\165','\166','\167', '\170','\171','\172','\173','\174','\175','\176','\177' }; private static final char[] uppercases = { '\000','\001','\002','\003','\004','\005','\006','\007', '\010','\011','\012','\013','\014','\015','\016','\017', '\020','\021','\022','\023','\024','\025','\026','\027', '\030','\031','\032','\033','\034','\035','\036','\037', '\040','\041','\042','\043','\044','\045','\046','\047', '\050','\051','\052','\053','\054','\055','\056','\057', '\060','\061','\062','\063','\064','\065','\066','\067', '\070','\071','\072','\073','\074','\075','\076','\077', '\100','\101','\102','\103','\104','\105','\106','\107', '\110','\111','\112','\113','\114','\115','\116','\117', '\120','\121','\122','\123','\124','\125','\126','\127', '\130','\131','\132','\133','\134','\135','\136','\137', '\140','\101','\102','\103','\104','\105','\106','\107', '\110','\111','\112','\113','\114','\115','\116','\117', '\120','\121','\122','\123','\124','\125','\126','\127', '\130','\131','\132','\173','\174','\175','\176','\177' }; /* ------------------------------------------------------------ */ /** * This method performance is about java.lang.String.toLowerCase 4 times. * * WARNING: Only works on ascii (not unicode) * * 经过测试,性能大约是 java.lang.String.toLowerCase 的4倍。 * * @param s * @return */ public static String asciiToLowerCase(String s) { char[] c = s.toCharArray(); int i = s.length(); // look for first conversion while ( i-- > 0 ){ char c1 = c[i]; if (c1 <= 127){ char c2 = lowercases[c1]; if ( c1 != c2 ) { c[i] = c2; break; } } } if( i == 0 ){ return s; } while ( i-- > 0 ){ if( c[i] <= 127 ){ c[i] = lowercases[c[i]]; } } return new String(c); } /** * This method performance is about java.lang.String.toUpperCase 4 times. * * WARNING: Only works on ascii (not unicode) * * 经过测试,性能大约是 java.lang.String.toUpperCase 的4倍。 * * @param s * @return */ public static String asciiToUpperCase(String s) { char[] c = s.toCharArray(); int i = s.length(); // look for first conversion while ( i-- > 0 ){ char c1 = c[i]; if (c1 <= 127){ char c2 = uppercases[c1]; if ( c1 != c2 ) { c[i] = c2; break; } } } if( i == 0 ){ return s; } while ( i-- > 0 ){ if( c[i] <= 127 ){ c[i] = uppercases[c[i]]; } } return new String(c); } }