String Tools类

import java.text.Collator;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Random;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>字符串处理通用工具类</p>
 * 字符串空串处理、随机串生成等.
 * @author  zz
 */
public final class StringTools
{
    // 随机串缺省长度:
    private static final int LEN = 6;
   
    // 随机串码表:ASCII_NUMERIC、ASCII_ALPHA(UPPER/LOWER)
    private static final char[] ASCII_NUMERIC = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
   
    // 随机对象:
    private static final Random RANDOM = new Random();
   
    // Locale 参数顺序
    private static final int LANGUAGE = 0;
   
    private static final int COUNTRY = 1;
   
    private static final int VARIANT = 2;
   
    private static final int DEFAULT_LENGTH = 50;
   
    /**
     * <默认构造函数>
     */
    private StringTools()
    {
       
    }
   
    /**
     * <p>字符串判空</p>
     * 判断一个对象是否为“空串”.
     * @param val 要判断的对象.
     * @return true “空串”, false 非空或不是字符串.
     */
    public static boolean isNullOrNone(Object val)
    {
        if (null == val)
        {
            return true;
        }
       
        if (val.getClass() == String.class && "".equals(val))
        {
            return true;
        }
        return false;
    }
   
    /**
     * <p>字符串比较</p>
     * 比较两个字符串是否相等,都为null时,认为相等.
     * @param val1  字符串1
     * @param val2  字符串2
     * @return true 两字符串相等(或都为null) false 两字符串不相等.
     */
    public static boolean isEquals(String val1, String val2)
    {
        if (null == val1 && null == val2)
        {
            return true;
        }
       
        if (val1 != null && val2 != null)
        {
            Collator c = Collator.getInstance();
            if (c.compare(val1, val2) == 0)
            {
                return true;
            }
        }
       
        return false;
    }
   
    /**
     * <p>获取从页面传递参数信息</p>
     * 将页面中传入的对象属性值解析成key:value形式放入map中,供外部使用。适用于struts2
     * 页面传入的对象必须覆盖toString()方法,且格式必须为:
     * prop:value;prop:value;prop:value
     * @param key 参数键值.
     * @param map 被搜索的Map结构.
     * @return 页面参数Map对象.
     */
    public static Map<String, String> getPropMap(String key, Map<String, String[]> map)
    {
        String[] strArr = map.get(key);
        if (isNullOrNone(strArr) || 0 == strArr.length)
        {
            return new HashMap<String, String>(0);
        }
       
        strArr = strArr[0].split(";");
        int length = strArr.length;
        String tempKey = "";
        String tempVal = "";
        String[] tempArr = null;
        Map<String, String> tempMap = new HashMap<String, String>();
        for (int i = 0; i < length; i++)
        {
            tempArr = strArr[i].split(":");
            tempKey = String.valueOf(tempArr[0]).trim();
            tempVal = String.valueOf(tempArr[1]).trim();
            tempMap.put(tempKey, tempVal);
        }
        return tempMap;
    }
   
    /**
     * <p>获取从页面传递参数信息</p>
     * 获取从页面传递的String类型的参数信息,适用于struts2
     * @param key 键.
     * @param map 被搜索的Map结构.
     * @return 参数字符串值.
     */
    public static String getStringParam(String key, Map<String, String[]> map)
    {
        String[] strArr = map.get(key);
        if (isNullOrNone(strArr) || 0 == strArr.length)
        {
            return "";
        }
        return strArr[0];
    }
   
    /**
     * <p>获取从页面传递参数信息</p>
     * 获取从页面传递的String类型的参数信息,适用于struts2
     * @param key 键.
     * @param map 被搜索的Map结构.
     * @return 参数布尔值.
     */
    public static boolean getBooleanParam(String key, Map<String, String[]> map)
    {
        String[] strArr = map.get(key);
        if (isNullOrNone(strArr) || 0 == strArr.length)
        {
            return false;
        }
       
        return Boolean.parseBoolean(strArr[0]);
    }
   
    /**
     * <p>获取从页面传递参数信息</p>
     * 获取从页面传递的String类型的参数信息,适用于struts2
     * @param key 键.
     * @param map 被搜索的Map结构.
     * @return 参数整型值.
     *
     */
    public static int getIntParam(String key, Map<String, String[]> map)
    {
        String[] strArr = map.get(key);
        if (isNullOrNone(strArr) || 0 == strArr.length)
        {
            return -1;
        }
       
        return Integer.parseInt(strArr[0]);
    }
   
    /**
     * <p>字符串分割</p>
     * 将字符串分割成字符串数组, 类似toCharArray方法.
     * @param input 被分的字符串.
     * @return 分成的字符串数组.
     */
    public static String[] toStringArray(String input)
    {
        if (isNullOrNone(input))
        {
            return new String[0];
        }
       
        int length = input.length();
        String[] strArr = new String[length];
       
        for (int i = 0; i < length; i++)
        {
            strArr[i] = String.valueOf(input.charAt(i));
        }
       
        return strArr;
    }
   
    /**
     * <p>字符串合成</p>
     * 将字符串数组转换成字符串.
     * @param item 字符串数组.
     * @return 合成后的字符串.
     */
    public static String arrayToString(String[] item)
    {
        if (item == null || item.length == 0)
        {
            return "";
        }
       
        StringBuffer msg = new StringBuffer();
        for (int i = 0; i < item.length; i++)
        {
            msg.append(item[i]);
        }
       
        return msg.toString();
    }
   
    /**
     * 获取随机串.
     * 获取缺省长度的随机数字串,首字符可以为'0'.
     * @author zhangtao(42373)
     * @return 缺省长度(6)数字串.
     */
    public static String getRandomNum()
    {
        return getRandomNum(LEN);
    }
   
    /**
     * 获取随机串.
     * 获取指定长度的随机数字串,首字符可以为'0'.
     * @author zhangtao(42373)
     * @param len 指定字符串中字符个数.
     * @return 定长数字串.
     */
    public static String getRandomNum(int len)
    {
        StringBuffer sb = new StringBuffer(len);
        int max = ASCII_NUMERIC.length;
       
        for (int i = 0; i < len; i++)
        {
            sb.append(ASCII_NUMERIC[RANDOM.nextInt(max)]);
        }
       
        return sb.toString();
    }
   
    /**
     * 去掉电话号码中的"<"前内容,">"后内容
     * 例如:Tom<13800000020> 返回13800000020
     * @author liuqian
     * @param uiMobile 显示的电话号码
     * @return String 返回没有<>格式的电话号码
     */
    public static String getUiMobile(String uiMobile)
    {
        if (isNullOrNone(uiMobile))
        {
            return "";
        }
        int start = uiMobile.indexOf('<');
        int end = uiMobile.indexOf('>');
        if (start > -1 && end > -1 && end > start)
        {
            return uiMobile.substring(start + 1, end);
        }
        return uiMobile;
    }
   
    /**
     * 是否包含非ASCII字符
     * @param msg 待校验的字符串
     * @return true 包含, false 不包含
     */
    public static boolean isContainUnicode(String msg)
    {
        for (int i = 0; i < msg.length(); i++)
        {
            Character c = msg.charAt(i);
            Character.UnicodeBlock blk = Character.UnicodeBlock.of(c);
            if (blk != Character.UnicodeBlock.BASIC_LATIN)
            {
                return true;
            }
        }
        return false;
    }
   
    /**
     * 根据字符串生成Locale
     * 根据数据库中表示语言信息的Locale字符串,如zh_CN来生成对应的Locale对象
     * @author zhangtao(42373)
     * @param locale 表示Locale的字符串,如zh_CN
     * @return Locale 对象
     * @see java.util.Locale
     */
    public static Locale getLocale(String locale)
    {
        String[] parts = {"", "", ""};
        String[] tmp = locale.split("_");
        System.arraycopy(tmp, 0, parts, 0, Math.min(tmp.length, parts.length));
        return new Locale(parts[LANGUAGE], parts[COUNTRY], parts[VARIANT]);
    }
   
    /**
     * 处理通用参数是否为数值
     * @param parameter 参数
     * @return boolean 匹配 true 不匹配 false
     */
    public static boolean isNumber(String parameter)
    {
        if (null == parameter)
        {
            return false;
        }
       
        Pattern p = Pattern.compile("[0-9]+");
        Matcher m = p.matcher(parameter);
        return m.matches();
    }
   
    /**
     * 处理通用参数是否为符合规则的字符串
     * @param parameter 参数
     * @param regex 匹配的字符串规则
     * @return true 表示匹配 false 不匹配
     */
    public static boolean isValidStringAllow(String parameter, String regex)
    {
        if (null == parameter || "".equals(parameter))
        {
            return false;
        }
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(parameter);
       
        return m.find();
    }
   
    /**
     * 由于字符串太长,需要截取一定的长度,默认为50
     * @param str 需要被截取的字符串
     * @return String [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
    public static String getStrByDefLength(String str)
    {
        if (isNullOrNone(str) || str.length() <= DEFAULT_LENGTH)
        {
            return str;
        }
        else
        {
            return str.substring(0, DEFAULT_LENGTH) + "......";
        }
    }
   
    /**
     * 将本地时间格式化为UTC时间
     * @param timeFormat 时间格式
     * @return newtime 转换后的时间
     * @see [类、类#方法、类#成员]
     */
    public static String getUTCtime(String timeFormat)
    {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sFormat = new SimpleDateFormat(timeFormat);//时间格式:yyyy-MM-dd HH:mm:ss
       
        TimeZone zone = TimeZone.getTimeZone("GMT");
        sFormat.setTimeZone(zone);
       
        String newtime = sFormat.format(cal.getTime());
        return newtime;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值