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);
}
}