Mercurial Hosting > luan
view src/org/eclipse/jetty/util/StringUtil.java @ 1012:8d0bdd357e6e
simplify StringUtil
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 24 Oct 2016 00:47:24 -0600 |
parents | 3242aff51053 |
children | 6939226e0ac4 |
line wrap: on
line source
// // ======================================================================== // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package org.eclipse.jetty.util; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** Fast String Utilities. * * These string utilities provide both conveniance methods and * performance improvements over most standard library versions. The * main aim of the optimizations is to avoid object creation unless * absolutely required. * * */ public final class StringUtil { private static final Logger LOG = LoggerFactory.getLogger(StringUtil.class); public static final String ALL_INTERFACES="0.0.0.0"; public static final String __ISO_8859_1="ISO-8859-1"; public final static String __UTF8="UTF-8"; public final static String __UTF16="UTF-16"; public final static Charset __UTF8_CHARSET; public final static Charset __ISO_8859_1_CHARSET; static { __UTF8_CHARSET=Charset.forName(__UTF8); __ISO_8859_1_CHARSET=Charset.forName(__ISO_8859_1); } private static 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' }; /* ------------------------------------------------------------ */ /** * fast lower case conversion. Only works on ascii (not unicode) * @param s the string to convert * @return a lower case version of s */ public static String asciiToLowerCase(String s) { char[] c = null; int i=s.length(); // look for first conversion while (i-->0) { char c1=s.charAt(i); if (c1<=127) { char c2=lowercases[c1]; if (c1!=c2) { c=s.toCharArray(); c[i]=c2; break; } } } while (i-->0) { if(c[i]<=127) c[i] = lowercases[c[i]]; } return c==null?s:new String(c); } /* ------------------------------------------------------------ */ /** * replace substrings within string. */ public static String replace(String s, String sub, String with) { int c=0; int i=s.indexOf(sub,c); if (i == -1) return s; StringBuilder buf = new StringBuilder(s.length()+with.length()); do { buf.append(s.substring(c,i)); buf.append(with); c=i+sub.length(); } while ((i=s.indexOf(sub,c))!=-1); if (c<s.length()) buf.append(s.substring(c,s.length())); return buf.toString(); } /* ------------------------------------------------------------ */ /** * append hex digit * */ public static void append(StringBuilder buf,byte b,int base) { int bi=0xff&b; int c='0'+(bi/base)%base; if (c>'9') c= 'a'+(c-'0'-10); buf.append((char)c); c='0'+bi%base; if (c>'9') c= 'a'+(c-'0'-10); buf.append((char)c); } public static void append2digits(StringBuilder buf,int i) { if (i<100) { buf.append((char)(i/10+'0')); buf.append((char)(i%10+'0')); } } public static String toString(byte[] b,int offset,int length,String charset) { try { return new String(b,offset,length,charset); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException(e); } } public static boolean isUTF8(String charset) { return __UTF8.equalsIgnoreCase(charset)||__UTF8Alt.equalsIgnoreCase(charset); } public static byte[] getBytes(String s) { try { return s.getBytes(__ISO_8859_1); } catch(Exception e) { LOG.warn("",e); return s.getBytes(); } } }