From 56d71f261a8bd6031e47e2bf80867049a2aa13da Mon Sep 17 00:00:00 2001
From: chenjinsong 字符串处理工具类. Description:抑制默认的构造器,避免实例化对象 判断一个对象是否为空
+ * 如果对象为空时,返回默认值. 对字符串进行MD5加密.
+ * 一般作为密码的处理方式,首先通过MD5进行加密,然后将字符串进行Base64编码获得所需字符.
+ * 截取处理字符串,当字符串超过指定的截取长度时,用“......”补充 通过给定url获取域名地址.
+ * 获得域名信息需去除 http/https/ftp 与 www 一些头信息,获取有效地址.
+ * 按照给定规则分隔字符串 字符编码转换,需要提供字符串的源编码格式.
+ * 字符串工具类中提供一些字符编码常量:
+ * {@link #CODE_GB2312}\{@link #CODE_GBK}\{@link #CODE_ISO8859_1}\{@link #CODE_UTF_8}
+ * 将url转为utf编码格式url,当url符合utf8格式,不会转换. 将utf8编码的url解析为原始url.当url不符合utf8格式时,不转换. 判断字符串是否是数字格式(包括小数形式).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;
+ }
+
+ }
+
+ }
+
+ /**
+ *
+ *
+ * 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();
+ }
+
+
+ /**
+ *
+ *
+ * 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);
+
+ }
+
+ /**
+ *
+ *
+ * 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);
+
+ }
+
+ /**
+ *
+ * 例子说明:
+ * @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("