公共类

  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) { // 1110xxxx
102                 sumb = bytePattern & 0x0f;
103                 more = 2;
104             } else if ((bytePattern & 0xf8) == 0xf0) { // 11110xxx
105                 sumb = bytePattern & 0x07;
106                 more = 3;
107             } else if ((bytePattern & 0xfc) == 0xf8) { // 111110xx
108                 sumb = bytePattern & 0x03;
109                 more = 4;
110             } else { // 1111110x
111                 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 obj
135      * @return 如为空,返回true,否则false
136      * @author YZH
137      */
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             // 对象为Map
152             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,即不为empty
159             return false;
160         }
161     }
162 
163     /**
164      * 转码
165      * @param str
166      * @return
167      */
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 args
179      */
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: YZH
281      */
282     public static String noNull(Object s) {
283         if (s == null)
284             return "";
285         else
286             return s.toString().trim();
287     }
288     
289     /**
290      * 
291      * {将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名}
292      * @param s 原文件名
293      * @return  重新编码后的文件名
294      * @author: YZH
295      */
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<arr.length;i++){
327             String si=arr[i];
328             if(si.equals(s2)){
329                 return true;
330             }
331         }
332         return false;
333     }
334     //格式化时间
335     public static String formatNum(Object num,String pattern){
336         DecimalFormat df = new DecimalFormat(pattern);
337         String db = df.format(num);
338         return db;
339     }
340     /**
341      * 
342      * @param 要四舍五入的数(0.045)
343      * @param precision(2) 保留位数 0.05
344      * @return
345      */
346     public static String round(double val, int precision) {  
347         Double ret = null;  
348         try {  
349             double factor = Math.pow(10, precision);  
350             ret = Math.floor(val * factor + 0.5) / factor;  
351             return ret+"";
352         } catch (Exception e) {  
353             e.printStackTrace();  
354             return val+"";
355         }   
356     }  
357     
358     //字符串转换成日期(包括年月日时分秒)
359     public static Date stringToDateTime(String str,String pattern){
360         SimpleDateFormat sdf=new SimpleDateFormat(pattern);
361         Date dt=null;
362         try {
363             dt = sdf.parse(str);
364             return dt;
365         } catch (Exception e) {
366             e.printStackTrace();
367             return null;
368         }
369     }
370 
371     public static String checkTips(String tips) {
372         StringBuffer sb = new StringBuffer();
373         sb.append("<script type=\"text/javascript\">").append("alert('").append(tips)
374                 .append("');window.history.back();").append("</script>");
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 }

 

posted @ 2014-08-11 15:05  大都督  阅读(203)  评论(0编辑  收藏  举报