StringUtil 字符串工具类

前言:该字符串工具类乃在一个老到掉渣的项目里翻到的,收拾收拾凑合着用一下吧!实在太老了!

/**
 * 
 * @author tangyouhua
 *  
 * 描述:字符串工具类
 */
public class StringUtil {

    /***************************************************************************
     * 函数功能:以指定的标记对字符串进行分割,最后将分割的各部分拼接成字符串
     * 
     * 参数说明:
     * 
     * @str:待分割的字符串
     * 
     * @mark:指定的标记
     * 
     *             返回值:拼接成的字符串
     **************************************************************************/
    public static String splitToStr(String str, String mark) {
        StringTokenizer st = new StringTokenizer(str, mark);
        String returnText = "";// 要返回的分割后的字符串
        while (st.hasMoreElements()) {
            String token = st.nextToken().trim();
            returnText += token.trim();
        }
        return returnText;
    }

    /***************************************************************************
     * 函数功能:以特定的分割符,将字符串进行分割,将分割的各个部份存放入list对象中
     * 
     * 参数说明:
     * 
     * @str:待分割的字符串
     * 
     * @mark:指定的分割符
     * 
     *              返回值:返回存放着分割好的字符串各个部门的列表对象
     **************************************************************************/
    public static List<String> splitToList(String str, String mark) {
        List<String> list = new ArrayList<String>();
        StringTokenizer st = new StringTokenizer(str, mark);
        while (st.hasMoreElements()) {
            String token = st.nextToken();
            list.add(token);
        }
        return list;
    }

    /***************************************************************************
     * 函数功能:判断指定的字符父串中是否存在指定的子串
     * 
     * 参数说明:
     * 
     * @fstr:指定的字符父串
     * @cstr:指定的字符子串
     * 
     *               返回值:存在返回true;不存在或者父串或子串为null,返回false;
     **************************************************************************/
    public static boolean isContainChild(String fstr, String cstr) {
        boolean flag = false;
        try {
            if (fstr == null || cstr == null)
                return false;
            else {
                if (fstr.indexOf(cstr) == -1)
                    flag = false;
                else
                    flag = true;
            }
        } catch (Exception ex) {
            flag = false;
            ex.printStackTrace();
        }
        return flag;
    }

    /**
     * 将指定的list对象中的元素,转换成字符串。每个元素之间用mark标记分隔开
     * 
     * @param:list 要转换的list对象
     * @param:mark 元素之间的分隔符号
     * @return:返回转换后的字符串
     * @throws:
     */
    public static String convertListToString(List<String> list, String mark) {
        try {
            int size = list.size();
            StringBuffer returnText = new StringBuffer("");
            for (int i = 0; i < size; i++) {
                String str = list.get(i);
                if (str == null)
                    continue;
                if (i != size - 1)
                    returnText.append(str.toCharArray()).append(mark);
                else
                    returnText.append(str.toCharArray());
            }
            return returnText.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /***************************************************************************
     * 函数功能:判断指定字符串是否是数字
     * 
     * 参数说明:
     * 
     * @str:待判断的字符串
     * 
     *              返回值:是返回true;否则返回false;
     **************************************************************************/
    public static boolean isNumber(String str) {
        boolean flag = false;
        if(isEmpty(str)){
            return false;
        }
        
        try {
            Pattern pattern = Pattern.compile("[0-9]*");
            Matcher isNum = pattern.matcher(str);
            if (!isNum.matches())
                flag = false;
            else
                flag = true;
        } catch (Exception ex) {
            flag = false;
            ex.printStackTrace();
        }
        return flag;
    }

    /***************************************************************************
     * 函数功能:全角转半角
     * 
     * 参数说明:
     * 
     * @QJstr:全角字符串
     * 
     *              返回值:返回转换后的半角字符串
     **************************************************************************/
    public static String q2b(String QJstr) {
        String outStr = "";
        String Tstr = "";
        byte[] b = null;

        for (int i = 0; i < QJstr.length(); i++) {
            try {
                Tstr = QJstr.substring(i, i + 1);
                b = Tstr.getBytes("unicode");
            } catch (java.io.UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            if (b[3] == -1) {
                b[2] = (byte) (b[2] + 32);
                b[3] = 0;

                try {
                    outStr = outStr + new String(b, "unicode");
                } catch (java.io.UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            } else
                outStr = outStr + Tstr;
        }
        return outStr;
    }

    /***************************************************************************
     * 函数功能:半角转全角
     * 
     * 参数说明:
     * 
     * @QJstr:半角字符串
     * 
     *              返回值:返回转换后的全角字符串
     **************************************************************************/
    public static String b2q(String BJstr) {
        String outStr = "";
        String Tstr = "";
        byte[] b = null;

        for (int i = 0; i < BJstr.length(); i++) {
            try {
                Tstr = BJstr.substring(i, i + 1);
                b = Tstr.getBytes("unicode");
            } catch (java.io.UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            if (b[3] != -1) {
                b[2] = (byte) (b[2] - 32);
                b[3] = -1;
                try {
                    outStr = outStr + new String(b, "unicode");
                } catch (java.io.UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            } else
                outStr = outStr + Tstr;
        }
        return outStr;
    }

    /***************************************************************************
     * 函数功能:判断指定的字符串是否是中文
     * 
     * 参数说明:
     * 
     * @QJstr:待判断的字符串
     * 
     *                返回值:是中文返回true;否则返回false;
     **************************************************************************/
    public static boolean isCharacter(String str) {
        try {
            return str.matches("[\\u4E00-\\u9FA5]+");
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
    }

    // md5
    private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

    /**
     * 转换字节数组为16进制字串
     * 
     * @param b
     *            字节数组
     * @return 16进制字串
     */

    public static String byteArrayToHexString(byte[] b) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }

    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n = 256 + n;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

    /**
     * 将指定的字符串进行MD5加密
     * 
     * @param:origin指定字符串
     * @return:
     * @throws:
     */
    public static String MD5Encode(String origin) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            resultString = byteArrayToHexString(md.digest(resultString
                    .getBytes()));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return resultString;
    }

    /**
     * 判断字符串是否为空
     * 
     * @param str
     * @return true 为null “” false 为不为空
     */
    public static boolean isEmpty(String str) {
        if (str == null || "".equals(str.trim()))
            return true;
        else
            return false;
    }
    
    /**
     * 按字符长度截取字符,将字符串转为utf-8编码,即都为两个字节
     * 
     * @param s
     *            原字符串
     * @param length
     *            截取长度
     * @return 截取后的长度
     */
    public static String subChineseString(String s, int length) {
        String str = "";
        byte[] bytes;
        try {
            bytes = s.getBytes("Unicode");

            int n = 0; // 表示当前的字节数
            int i = 2; // 要截取的字节数,从第3个字节开始
            for (; i < bytes.length && n < length; i++) {
                // 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节
                if (i % 2 == 1) {
                    n++; // 在UCS2第二个字节时n加1
                } else {
                    // 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节
                    if (bytes[i] != 0) {
                        n++;
                    }
                }
            }
            // 如果i为奇数时,处理成偶数
            if (i % 2 == 1) {
                // 该UCS2字符是汉字时,去掉这个截一半的汉字
                if (bytes[i - 1] != 0)
                    i = i - 1;
                // 该UCS2字符是字母或数字,则保留该字符
                else
                    i = i + 1;
            }
            str = new String(bytes, 0, i, "Unicode");
            return str;
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            return str;
        }
    }

    /**
     * 截取字符串添加省略号
     * 
     * @param str
     *            带处理字符串
     * @param position
     *            截取位置,汉字、数字、字母都算一个位置
     * @return 带省略号的字符串
     */
    public static String subStringAddEllipsis(String str, int position) {
        String result = "";
        // 因汉字和字符都处理为两个字节,故截取位置需X2
        int subPostion = position * 2;
        if (str != null && !str.equals("")) {
            try {
                if (str.getBytes("Unicode").length > subPostion) {
                    str = StringUtil.subChineseString(str, subPostion) + "...";
                    // content = content.substring(0, 12) + "...";
                }
                result = str;
            } catch (UnsupportedEncodingException e) {
                return "";
            }
        }
        return result;
    }

    /**
     * 利用时间生成8位的随机数
     * 
     * @param time
     * @return
     */
    public static String toHex() {
        String s = "";
        for (int i = 0; i < 8; i++) {
            int a = (int) (Math.random() * 10);
            s += a;
        }
        return s;
    }

    /**
     * 字符串替换函数
     * 
     * @param from
     *            要替换的字符
     * @param to
     *            要替换成的目标字符
     * @param source
     *            要替换的字符串
     * @return 替换后的字符串
     */
    public static String str_replace(String from, String to, String source) {
        StringBuffer bf = new StringBuffer("");
        StringTokenizer st = new StringTokenizer(source, from, true);

        while (st.hasMoreTokens()) {
            String tmp = st.nextToken();
            if (tmp.equals(from)) {
                bf.append(to);
            } else {
                bf.append(tmp);
            }
        }
        return bf.toString();
    }


    /**
     * 判断版本
     * 
     * @param str1
     *            旧
     * @param str2
     *            新
     * @return
     */
    public static boolean compareString(String str1, String str2) {

        try {
            str2 = str2.replace('.', ',');
            str1 = str1.replace('.', ',');
            String[] s1 = str1.split(",");
            String[] s2 = str2.split(",");

            for (int i = 0; i < s1.length; i++) {
                if (i <= s2.length - 1) {
                    if (s1[i].compareTo(s2[i]) < 0) {
                        LogUtil.d("com.csair.ehome",s1[i] + "-0-" + s2[i]);
                        return true;
                    } else {
                        try {
                            LogUtil.d("com.csair.ehome",s1[i] + "-0-" + s2[i]);
                            if (Integer.valueOf(s1[i]) < Integer.valueOf(s2[i])) {
                                return true;
                            } else if (Integer.valueOf(s1[i]) > Integer
                                    .valueOf(s2[i])) {
                                return false;
                            }

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            if (s1.length < s2.length) {
                return true;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 单引号转化
     * 
     * @param value
     * @return
     */
    public static String signConvert(String value) {
        String result = "";
        if (!StringUtil.isEmpty(value)) {
            String strArray[] = value.split("'");
            if (strArray.length - 1 > 0) {
                for (int i = 0; i < strArray.length - 1; i++) {
                    result = result + strArray[i] + "''";
                }
                result = result + strArray[strArray.length - 1];
                LogUtil.d("com.csair.ehome","转义----->" + result);
            } else {
                result = value;
            }
            LogUtil.d("com.csair.ehome","result----->" + result);
        }

        return result;

    }


    /***
     * Decode 指url进行 UTF-8编码
     * 
     * @return  url编码后的字符串
     */
    public static String decode(String input) {

        try {
            input = URLDecoder.decode(input, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
        return input;
    }

    /**
     * 是否合法的手机号码
     * 
     * @param str
     * @return
     */
    public static boolean isCellphone(String str) {

        // Pattern pattern = Pattern.compile("[0-9]{7,15}");
        Pattern pattern = Pattern
                .compile("^((13[0-9])|(147)|(15[^4,\\D])|(177)|(18[0-9]))\\d{8}$");
        // Pattern pattern = Pattern.compile("1\\d{10}");
        Matcher matcher = pattern.matcher(str);

        if (matcher.matches()) {
            return true;
        } else if (str == "" || str.length() < 1) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 是否电信手机号码
     * 
     * @param str
     * @return
     */
    public static boolean isCTCellphone(String str) {
        /*
         * 133 1349(卫星通信,原中国卫通) 153 180 181 189
         */

        Pattern pattern = Pattern
                .compile("^((133)|(134)|(139)|(153)|(177)|(180)|(181)|(189))\\d{8}$");
        Matcher matcher = pattern.matcher(str);

        if (matcher.matches()) {
            return true;
        } else if (str == "" || str.length() < 1) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 判断字符串是否是空或者任意个空格
     * 
     * @param str
     * @return
     */
    public static boolean isNullOrInfiniteEmpty(String str) {
        return str == null || "".equals(str) || str.matches("\\s+");
    }

    /**
     * 生成随机数
     * 
     * @param limits
     *            范围 如9999,代表4位数,999999,代表6位数
     * @return
     */
    public static int getRandom(int limits) {
        Random rand = new Random();
        int i = rand.nextInt();
        i = rand.nextInt(limits);
        LogUtil.d("com.csair.ehome","生成随机数----" + i);
        return i;
    }

    /**
     * 判断是否只有数字英文下划线组成
     * 
     * @param str
     * @return true - 是
     */
    public static boolean isEnglishOrNumber(String str) {
        return str.matches("^[0-9a-zA-Z_]{1,}");
    }

    /**
     * 字符串移除空格
     * 
     * @param str
     * @return
     */
    public static String removeAllSpace(String str) {
        String tmpstr = str.replace(" ", "");
        return tmpstr;
    }

    /**
     * 将URL中文转义
     * 
     * @param url
     * @return
     */
    public static String urlEncode(String url) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < url.length(); i++) {
            String strIndex = String.valueOf(url.charAt(i));
            if (isCharacter(strIndex) || " ".equals(strIndex)) {
                try {
                    builder.append(URLEncoder.encode(strIndex, "UTF8"));
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } else {
                builder.append(strIndex);
            }
        }
        return builder.toString().replace("+", "%20");
    }

    /**
     * 判断是否是email的正确格式
     * 
     * **/

    public static boolean checkEmail(String email) {
        String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-z0-9\\-]+\\.)+))([a-z]{2,4}|[0-9]{1,3})(\\]?)$";
        Pattern p = Pattern.compile(str);
        Matcher m = p.matcher(email);

        return m.matches();

    }

        /***
     * 
     * 判断QQ格式是否正确
     * ***/
    public static boolean isQQ(String QQ) {
        String phone = "^[1-9]\\d{4,9}$";
        Pattern p = Pattern.compile(phone);
        Matcher m = p.matcher(QQ);
        return m.matches();
    }

    /**
     * 将data字节型数据转换为0~255 (0xFF 即BYTE)。
     * 
     * @param data
     * @return
     */
    public static int getUnsignedByte(byte data) {
        return data & 0x0FF;
    }

    /**
     * 通过给定的字符串获取对应的日期+时间
     * 
     * @param test
     * @return
     */
    public static String getDateTime(String test) {
        Pattern pattern = Pattern
                .compile("(\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2})\\.*");
        Matcher matcher = pattern.matcher(test);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }

    /**
     * 通过给定的字符串获取对应的时间
     * 
     * @param test
     * @return
     */
    public static String getTime(String test) {
        Pattern pattern = Pattern.compile("(\\d{1,2}:\\d{1,2}:\\d{1,2})\\.*");
        Matcher matcher = pattern.matcher(test);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }

    /**
     * 通过给定的字符串获取对应的日期
     * 
     * @param test
     * @return
     */
    public static String getDate(String test) {
        Pattern pattern = Pattern.compile("(\\d{4}-\\d{1,2}-\\d{1,2})\\.*");
        Matcher matcher = pattern.matcher(test);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }

    /**
     * 获取字符串的MD5值
     * 
     * @param string
     * @return
     */
    public static String md5(String string) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(
                    string.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("Huh, MD5 should be supported?", e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Huh, UTF-8 should be supported?", e);
        }

        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10)
                hex.append("0");
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,914评论 25 707
  • 一、字符串在C#中,字符串是一系列不可修改的Unicode字符,创建字符串后,就不能修改它。要创建字符串,最常用的...
    CarlDonitz阅读 1,273评论 0 2
  • 橘子小姐,她已经上大学了,却没去上海,也遇不到那个让他心跳加速的石了。 那时橘子小姐正在上初中,她是那种乖孩子,每...
    籽安阅读 299评论 0 0
  • 早上五点钟圈流鼻血,给他处理完我就睡不着了,所以,上课的时候不停的打呵欠,还不停的打嗝。 上午海亮老师说,要发自内...
    misang阅读 142评论 0 4
  • 雷声渐渐响起,女孩走在马路边。一辆车向她这冲过来,女孩没有躲开,脸上没有丝毫恐惧。"慕依依,你不是疯了。"女...
    筱千瑶阅读 580评论 1 0