/* * @(#)StringUtil.java 1.0 * * Copyright 2010 NIS, Inc. All rights reserved. * */ package com.nis.nmsclient.util; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.MessageDigest; import java.util.Collection; import java.util.Map; import java.util.UUID; import sun.misc.BASE64Encoder; /** * *

字符串处理工具类.

* @author 中科智源育成信息有限公司 E-mail: doufengh@software.ict.ac.cn * @version 1.0 创建时间:Nov 2, 2010 2:57:56 PM * */ public final class StringUtil { /** * ISO8859_1 编码集 */ public static final String CODE_ISO8859_1 = "ISO8859_1"; /** * GB2312 编码集 */ public static final String CODE_GB2312 = "GB2312"; /** * GBK 编码集 */ public static final String CODE_GBK = "GBK"; /** * UTF-8 编码集 */ public static final String CODE_UTF_8 = "UTF-8"; private static int size = 0; private static final String[] SIMPLIFIED_CASE = { "O", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" }; // private static final String[] SIMPLIFIED_CASE = { "Zero", "One", "Two", "Three", "Four", "Five", // "Six", "Seven", "Eight", "Nine", "Ten" }; private static final String[] TRADITIONAL_CASE = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" }; // private static final String[] TRADITIONAL_CASE = { "Zero", "One", "Two", "Three", "Four", "Five", // "Six", "Seven", "Eight", "Nine", "Ten" }; /** *

Description:抑制默认的构造器,避免实例化对象

*/ private StringUtil() { } /** * *

判断一个对象是否为空

*

* object元素判断所有对象是否为空. * 另外对{@link String}、{@link Collection} 、{@link Map} 进行长度验证,如果长度为0,视为空对象. *

*
	* String aa = " ";
	* List list = new ArrayList()
	* LinkedHashSet set = new LinkedHashSet();
	* StringUtil.isEmpty(aa) = true
	* StringUtil.isEmpty(list) = true
	* StringUtil.isEmpty(set) = true
	* StringUtil.isEmpty("\t") = true
	* 
* @param object 对象元素 * @return true 对象为null,false 对象不为null. */ public static boolean isEmpty(Object object) { initSize(object); return size==0; } /** * * 判断对象是否有数据存在? 不存在为0、存在不为0的值. * @param object 对象值 */ private static void initSize(Object object){ if (object == null) { size = 0; } else { if (object instanceof String) { size = ((String)object).trim().length(); } else if (object instanceof Collection) { size = ((Collection)object).size(); } else if (object instanceof Map) { size = ((Map)object).size(); //其他数据类型 } else { size = 1; } } } /** * *

如果对象为空时,返回默认值.

* @param object 要判断是否为空的对象 * @param defaultValue 为空时设的默认值 * @see #isEmpty(Object) * @return 获取处理后的数据 */ public static Object setDefaultValueIfNull(Object object,Object defaultValue){ if(isEmpty(object)){ return defaultValue; } return object; } /** * *

对字符串进行MD5加密.

*

* 一般作为密码的处理方式,首先通过MD5进行加密,然后将字符串进行Base64编码获得所需字符. *

*
	* String str = "ceshi";
	* StringUtil.md5(str) = "zBfDDNERxyFfyPUfh5Dg4Q=="
	* 
* @param msg 要加密的字符串 * @return 返回加密后的25位字符,如果解析出现异常将返回null. */ public static String md5(String msg) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] b = md.digest(msg.getBytes()); BASE64Encoder encoder = new BASE64Encoder(); String code = encoder.encode(b); return code; } catch (Exception e) { return null; } } /** *

截取处理字符串,当字符串超过指定的截取长度时,用“......”补充

*
	* String str = "中华人民共和国";
	* StringUtil.getMoreString(str, 6) = "中华人民共和......"
	* 
* @param text 字符串数据 * @param length 截取的长度值 * @return 返回处理后字符 */ public static String getMoreString(String text,int length){ StringBuilder textBuilder = new StringBuilder(); if(isEmpty(text)){ return null; } if(text.length()>length){ text = text.substring(0,length); textBuilder.append(text).append("......"); }else { textBuilder.append(text); } return textBuilder.toString(); } /** * *

通过给定url获取域名地址.

*

* 获得域名信息需去除 http/https/ftp 与 www 一些头信息,获取有效地址. *

*
	* StringUtil.getDomain("http://www.baidu.com") = "baidu.com"
	* 
* @param webSiteUrl url 地址 * @return 返回截取后的域名地址 */ public static String getDomain(String webSiteUrl) { String url = ""; if(isEmpty(webSiteUrl)){ return url; } if (webSiteUrl.indexOf("http://") >= 0) { url = webSiteUrl.substring("http://".length(), webSiteUrl.length()); } else if (webSiteUrl.indexOf("https://", 0) >= 0) { url = webSiteUrl.substring("https://".length(), webSiteUrl.length()); } else if (webSiteUrl.indexOf("ftp://", 0) >= 0) { url = webSiteUrl.substring("ftp://".length(), webSiteUrl.length()); } else { url = webSiteUrl; } if (url.indexOf("/", 0) >= 0) { url = url.substring(0, url.indexOf("/", 1)); } if (url.indexOf("www.") == 0) { url = url.substring(url.indexOf(".") + 1, url.length()); } if (url.indexOf("?") >= 0) { url = url.substring(0, url.indexOf("?")); } return url; } /** * *

按照给定规则分隔字符串

*
例子说明:
* @param str 需要分隔的字符串 * @param regex 分隔规则 * @return 返回字符串数组,如果分隔字符串为空返回null. */ public static String[] Split(String str,String regex) { if(StringUtil.isEmpty(str)){ return null; } return str.split(regex); } /** * *

字符编码转换,需要提供字符串的源编码格式.

*

* 字符串工具类中提供一些字符编码常量: * {@link #CODE_GB2312}\{@link #CODE_GBK}\{@link #CODE_ISO8859_1}\{@link #CODE_UTF_8} *

* @param value 要编码的值 * @param sourceCodingFormat 字符的原始编码格式,具体编码格式可看本类提供的编码样式. * @param destCodingFormat 要转换字符的编码格式,具体编码格式可看本类提供的编码样式. * @return 返回编码后的字符串. * @throws UnsupportedEncodingException */ public static String getCodingConversionResult(String value,String sourceCodingFormat, String destCodingFormat ) throws UnsupportedEncodingException{ if(isEmpty(value)){ return null; } return new String(value.getBytes(sourceCodingFormat), destCodingFormat); } /** * *

将url转为utf编码格式url,当url符合utf8格式,不会转换.

*
	* StringUtil.getUTF8URLEncode("http://www.baidu.com/s?param='中国'") = 
	*   "http%3A%2F%2Fwww.baidu.com%2Fs%3Fparam%3D%27%E4%B8%AD%E5%9B%BD%27"
	* 
* @see #getUTF8URLDecode(String) * @param url 字符串url * @return 返回utf8转换后的字符url * @throws UnsupportedEncodingException */ public static String getUTF8URLEncode(String url)throws UnsupportedEncodingException{ if(isUtf8Url(url)){ return url; } return URLEncoder.encode(url, StringUtil.CODE_UTF_8); } /** * *

将utf8编码的url解析为原始url.当url不符合utf8格式时,不转换.

*
例子说明:
* @see #getUTF8URLEncode(String) * @param url 字符串url * @return 返回解析后字符url * @throws UnsupportedEncodingException */ public static String getUTF8URLDecode(String url)throws UnsupportedEncodingException{ /*if(!isUtf8Url(url)){ return url; }*/ return URLDecoder.decode(url, StringUtil.CODE_UTF_8); } /** * 编码是否有效 * @param text * @return */ private static boolean Utf8codeCheck(String text){ String sign = ""; if (text.startsWith("%e")){ for (int i = 0, p = 0; p != -1; i++) { p = text.indexOf("%", p); if (p != -1){ p++; } sign += p; } } return sign.equals("147-1"); } /** * 是否Utf8Url编码 * @param text * @return true or false */ private static boolean isUtf8Url(String text) { text = text.toLowerCase(); int p = text.indexOf("%"); if (p != -1 && text.length() - p > 9) { text = text.substring(p, p + 9); } return Utf8codeCheck(text); } /** * *

判断字符串是否是数字格式(包括小数形式).

*
    * String a1 = "12";
	* String a2 = "0.01";
	* String a3 = "0.0.1";
	* String a4 = "123a";
	* StringUtil.isNumeric(a1) = true
	* StringUtil.isNumeric(a2) = true
	* StringUtil.isNumeric(a3) = false
	* StringUtil.isNumeric(a4) = false
    * 
* @param numberString 数字格式字符串 * @return true 符合数字格式(包括小数),false 不符合数字格式. */ public static boolean isNumeric(String numberString){ if(isEmpty(numberString)){ return false; } if(numberString.startsWith(".")||numberString.endsWith(".")){ return false; } int length = numberString.split("\\.").length-1; //判断小数点在字符串中出现的次数。 if(length>1) { //小数点大于1次,不符合数字规范 return false; } for(int i=0; i将字符串数字转换为简体大写中文格式.

*
    * StringUtil.convertSimplifiedCase("325") = ”三二五"
    * 
* @param numberString 数字字符串 * @return 返回简体大写后的数字 */ public static String convertSimplifiedCase(String numberString) { StringBuilder simplifiedBuilder = new StringBuilder(); if(isEmpty(numberString)){ return null; } for (int i = 0; i < numberString.length(); i++) { String tempNumberString = String.valueOf(numberString.charAt(i)); if ("0123456789".indexOf(tempNumberString) >= 0) { int number = Integer.parseInt(tempNumberString); simplifiedBuilder.append(SIMPLIFIED_CASE[number]); } else { simplifiedBuilder.append(tempNumberString); } } return simplifiedBuilder.toString(); } /** * *

把字符串中的数字转换成繁体大写中文的格式.

*
    * StringUtil.convertTraditionalCase("325") = "叁贰伍"
    * 
* @param numberString 数字字符串 * @return 返回繁体大写后的数字 */ public static String convertTraditionalCase(String numberString) { StringBuilder simplifiedBuilder = new StringBuilder(); if(isEmpty(numberString)){ return null; } for (int i = 0; i < numberString.length(); i++) { String tempNumberString = String.valueOf(numberString.charAt(i)); if ("0123456789".indexOf(tempNumberString) >= 0) { int number = Integer.parseInt(tempNumberString); simplifiedBuilder.append(TRADITIONAL_CASE[number]); } else { simplifiedBuilder.append(tempNumberString); } } return simplifiedBuilder.toString(); } /** * *

创建唯一标识字符串.

*
   * StringUtil.createUUID() = "00000DAF3CFC4E0B8DF2D5BEACB14D75" 
   * 
* @return 返回标识符字符串 */ public static String createUUID() { String uuid = UUID.randomUUID().toString(); uuid = uuid.replace("-", ""); return uuid.toUpperCase(); } /** * *

字符串过滤,负责将html的textarea属性获得的字符转换成html格式的字符集.

* @param str 要解析的字符串 * @return 是解析后的字符串 */ public static String htmlFilter(String str) { StringBuffer stringbuffer = new StringBuffer(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); switch (c) { case 39: stringbuffer.append("'"); break; case 34: stringbuffer.append("""); break; case 60: stringbuffer.append("<"); break; case 62: stringbuffer.append(">"); break; case 38: stringbuffer.append("&"); break; case 32: stringbuffer.append(" "); break; case 10: stringbuffer.append("
"); break; case 8220: stringbuffer.append("“"); break; case 8221: stringbuffer.append("”"); break; default: stringbuffer.append(c); break; } } return stringbuffer.toString(); } }