1 /**功能说明 2 * @param 公共方法 3 * @author 4 * @since 2013-4-15 下午02:04:56 5 */ 6 package com.mall.common; 7 8 import java.io.UnsupportedEncodingException; 9 import java.lang.reflect.Array; 10 import java.text.DecimalFormat; 11 import java.text.SimpleDateFormat; 12 import java.util.Collection; 13 import java.util.Date; 14 import java.util.Map; 15 import java.util.StringTokenizer; 16 17 import org.apache.log4j.Logger; 18 19 import sun.misc.BASE64Decoder; 20 21 public class StringUtils { 22 private static Logger log=Logger.getLogger(StringUtils.class); 23 24 public static final String KEYWORD_IMPORT = "会员批量导入已经成功!"; 25 26 public static final String ALLOWED_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()"; 27 28 /** 29 * 转码 30 * @param input 31 * @return 32 */ 33 public static String encodeURIComponent(String input) { 34 if (StringUtils.isEmpty(input)) { 35 return input; 36 } 37 38 int l = input.length(); 39 StringBuilder o = new StringBuilder(l * 3); 40 try { 41 for (int i = 0; i < l; i++) { 42 String e = input.substring(i, i + 1); 43 if (ALLOWED_CHARS.indexOf(e) == -1) { 44 byte[] b = e.getBytes("utf-8"); 45 o.append(getHex(b)); 46 continue; 47 } 48 o.append(e); 49 } 50 return o.toString(); 51 } catch (UnsupportedEncodingException e) { 52 log.error(e.getMessage()); 53 } 54 return input; 55 } 56 57 /** 58 * 解码 59 * @param encodedURI 60 * @return 61 */ 62 public static String decodeURIComponent(String encodedURI) { 63 char actualChar; 64 65 StringBuffer buffer = new StringBuffer(); 66 67 int bytePattern, sumb = 0; 68 69 for (int i = 0, more = -1; i < encodedURI.length(); i++) { 70 actualChar = encodedURI.charAt(i); 71 72 switch (actualChar) { 73 case '%': { 74 actualChar = encodedURI.charAt(++i); 75 int hb = (Character.isDigit(actualChar) ? actualChar - '0' 76 : 10 + Character.toLowerCase(actualChar) - 'a') & 0xF; 77 actualChar = encodedURI.charAt(++i); 78 int lb = (Character.isDigit(actualChar) ? actualChar - '0' 79 : 10 + Character.toLowerCase(actualChar) - 'a') & 0xF; 80 bytePattern = (hb << 4) | lb; 81 break; 82 } 83 case '+': { 84 bytePattern = ' '; 85 break; 86 } 87 default: { 88 bytePattern = actualChar; 89 } 90 } 91 92 if ((bytePattern & 0xc0) == 0x80) { // 10xxxxxx 93 sumb = (sumb << 6) | (bytePattern & 0x3f); 94 if (--more == 0) 95 buffer.append((char) sumb); 96 } else if ((bytePattern & 0x80) == 0x00) { // 0xxxxxxx 97 buffer.append((char) bytePattern); 98 } else if ((bytePattern & 0xe0) == 0xc0) { // 110xxxxx 99 sumb = bytePattern & 0x1f;100 more = 1;101 } else if ((bytePattern & 0xf0) == 0xe0) { // 1110xxxx102 sumb = bytePattern & 0x0f;103 more = 2;104 } else if ((bytePattern & 0xf8) == 0xf0) { // 11110xxx105 sumb = bytePattern & 0x07;106 more = 3;107 } else if ((bytePattern & 0xfc) == 0xf8) { // 111110xx108 sumb = bytePattern & 0x03;109 more = 4;110 } else { // 1111110x111 sumb = bytePattern & 0x01;112 more = 5;113 }114 }115 return buffer.toString();116 }117 118 private static String getHex(byte buf[]) {119 StringBuilder o = new StringBuilder(buf.length * 3);120 for (int i = 0; i < buf.length; i++) {121 int n = (int) buf[i] & 0xff;122 o.append("%");123 if (n < 0x10) {124 o.append("0");125 }126 o.append(Long.toString(n, 16).toUpperCase());127 }128 return o.toString();129 }130 131 /**132 * 判断某个对象是否为空 集合类、数组做特殊处理133 * 134 * @param obj135 * @return 如为空,返回true,否则false136 * @author YZH137 */138 @SuppressWarnings("unchecked")139 public static boolean isEmpty(Object obj) {140 if (obj == null)141 return true;142 143 // 如果不为null,需要处理几种特殊对象类型144 if (obj instanceof String) {145 return obj.equals("");146 } else if (obj instanceof Collection) {147 // 对象为集合148 Collection coll = (Collection) obj;149 return coll.size() == 0;150 } else if (obj instanceof Map) {151 // 对象为Map152 Map map = (Map) obj;153 return map.size() == 0;154 } else if (obj.getClass().isArray()) {155 // 对象为数组156 return Array.getLength(obj) == 0;157 } else {158 // 其他类型,只要不为null,即不为empty159 return false;160 }161 }162 163 /**164 * 转码165 * @param str166 * @return167 */168 public static String encodeBase64(String str){169 if (str == null){ 170 return null; 171 }else{172 return (new sun.misc.BASE64Encoder()).encode(str.getBytes() ); 173 }174 }175 176 /**177 * 解码178 * @param args179 */180 public static String decodeBase64(String str){181 if (str == null) {182 return null;183 }else{184 BASE64Decoder decoder = new BASE64Decoder(); 185 try {186 byte[] b = decoder.decodeBuffer(str); 187 return new String(b); 188 } catch (Exception e) {189 e.printStackTrace();190 return null; 191 }192 }193 }194 195 /**196 * 使用StringTokenizer类将字符串按分隔符转换成字符数组197 * @param string 字符串 198 * @param divisionChar 分隔符199 * @return 字符串数组200 * @see [类、类#方法、类#成员]201 */202 public static String[] stringAnalytical(String string, String divisionChar)203 {204 int i = 0;205 StringTokenizer tokenizer = new StringTokenizer(string, divisionChar);206 207 String[] str = new String[tokenizer.countTokens()];208 209 while (tokenizer.hasMoreTokens())210 {211 str[i] = new String();212 str[i] = tokenizer.nextToken();213 i++;214 }215 216 return str;217 }218 219 /**220 * 字符串解析,不使用StringTokenizer类和java.lang.String的split()方法221 * 将字符串根据分割符转换成字符串数组222 * @param string 字符串223 * @param c 分隔符224 * @return 解析后的字符串数组225 */226 public static String[] stringAnalytical(String string, char c)227 {228 //字符串中分隔符的个数229 int count = 0;230 231 //如果不含分割符则返回字符本身232 if (string.indexOf(c) == -1)233 {234 return new String[]{string};235 }236 237 char[] cs = string.toCharArray();238 239 //过滤掉第一个和最后一个是分隔符的情况240 for (int i = 1; i < cs.length -1; i++)241 {242 if (cs[i] == c)243 {244 count++; //得到分隔符的个数245 }246 }247 248 String[] strArray = new String[count + 1];249 int k = 0, j = 0;250 String str = string;251 252 //去掉第一个字符是分隔符的情况253 if ((k = str.indexOf(c)) == 0)254 {255 str = string.substring(k + 1);256 }257 258 //检测是否包含分割符,如果不含则返回字符串259 if (str.indexOf(c) == -1)260 {261 return new String[]{str};262 }263 264 while ((k = str.indexOf(c)) != -1)265 {266 strArray[j++] = str.substring(0, k);267 str = str.substring(k + 1);268 if ((k = str.indexOf(c)) == -1 && str.length() > 0)269 {270 strArray[j++] = str.substring(0);271 }272 }273 274 return strArray;275 }276 277 /**278 * 去除null以及空格串279 * @return:280 * @author: YZH281 */282 public static String noNull(Object s) {283 if (s == null)284 return "";285 else286 return s.toString().trim();287 }288 289 /**290 * 291 * {将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名}292 * @param s 原文件名293 * @return 重新编码后的文件名294 * @author: YZH295 */296 public static String toUtf8String(String s) {297 StringBuffer sb = new StringBuffer();298 for (int i = 0; i < s.length(); i++) {299 char c = s.charAt(i);300 if ((c >= 0) && (c <= 255)) {301 sb.append(c);302 }303 else {304 byte[] b;305 306 try {307 b = Character.toString(c).getBytes("UTF-8");308 }309 catch (Exception ex) {310 System.out.println(ex);311 b = new byte[0];312 }313 for (int j = 0; j < b.length; j++) {314 int k = b[j];315 if (k < 0) {316 k += 256;317 }318 sb.append("%" + Integer.toHexString(k).toUpperCase());319 }320 }321 }322 return sb.toString();323 }324 325 public static boolean arryContain(String[]arr,String s2){326 for(int i=0;i").append("alert('").append(tips)374 .append("');window.history.back();").append("");375 return sb.toString();376 }377 378 public static void main(String[]args){379 String result=StringUtils.round(0.003d, 2);380 String a = StringUtils.encodeBase64("aaaaa");381 String b = StringUtils.decodeBase64(a);382 System.out.println(result+"==="+a+"==="+b);383 }384 }