`

自己在项目开发中整理的工具类,希望对大家有用

阅读更多
  这是我在做Java的项目开发过程中整理的一个单例的完整工具类,不同的项目会用到不同的方法,我把一些比较有用的方法都整理在了一起,其中大部分的方法都是我自己写的,但也参考了一些项目中的高手写代码的方法和思路,希望这些方法能对大家有帮助。以前都是参考别人的代码,这次我慢慢将自己在项目中写过的代码发布出来,也为大家做一点贡献。
  祝大家新年快乐!

2010.10.28
这个类我又进行了一些修改,把与日期相关的操作整理到了《操作日期和时间的工具类》中,修正了利用MD5算法对字符串进行加密的方法,使其支持JDK1.6,并且还新增了一个MD5加密字符串的方法和一个可以去掉字符串两端全角和半角空格的方法。

/*
 * @(#)CommonUtilities.java 2010-10-26
 * 
 * Copyright 2010 BianJing,All rights reserved.
 */
package com.pagination.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 用于处理公共数据的工具类
 * 
 * @author BianJing<br/>
 *         E-mail:vipbooks@163.com
 * @version 1.4 2010-10-26
 */
public class CommonUtilities {
    private CommonUtilities() {
    }

    /**
     * 检查字符串是否为Null或空字符串
     * 
     * @param str
     *            要检查的字符串
     * @return boolean true:为空,false:不为空
     */
    public static boolean isNull(String str) {
        if (str == null || str.trim().length() == 0) {
            return true;
        }

        return false;
    }

    /**
     * 检查Collection是否为Null或没有元素
     * 
     * @param 要检查的Collection及其子类
     * @return boolean true:为空,false:不为空
     */
    public static boolean isNull(Collection<?> collection) {
        if (collection == null || collection.isEmpty()) {
            return true;
        }

        return false;
    }

    /**
     * 检查Map是否为Null或没有元素
     * 
     * @param 要检查的Map及其子类
     * @return boolean true:为空,false:不为空
     */
    public static boolean isNull(Map<?, ?> map) {
        if (map == null || map.isEmpty()) {
            return true;
        }

        return false;
    }

    /**
     * 检查指定字符串是否全数字
     * 
     * @param str
     *            要检查的字符串
     * @return true:全数字,false:非全数字
     */
    public static boolean validatorNumber(String str) {
        str = str.trim();
        int length = str.length();
        char c = '\u0000';

        for (int i = 0; i < length; i++) {
            c = str.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }

        return true;
    }

    /**
     * 让指定字符串进行给定的正则表达式验证
     * 
     * @param str
     *            要验证的字符串
     * @param regExp
     *            给定的正则表达式
     * @return boolean
     */
    public static boolean RegExpVerify(String str, String regExp) {
        Pattern pattern = Pattern.compile(regExp);
        Matcher matcher = pattern.matcher(str);

        return matcher.find();
    }

    /**
     * 字符串如果为空就给其一个指定的值
     * 
     * @param source
     *            原字符串值
     * @param target
     *            如果为空则替换成该目标值
     * @return 字符串
     */
    public static String changeNull(String source, String target) {
        if (isNull(source)) {
            return target;
        } else {
            return source;
        }
    }

    /**
     * 过滤网页文本
     * 
     * @param html
     *            要过滤的网页文本
     * @return 过滤后的网页文本
     */
    public static String filterHtml(String html) {
        html = html.replaceAll("&", "&amp;");
        html = html.replaceAll("<", "&lt;");
        html = html.replaceAll(">", "&gt;");
        html = html.replaceAll(" ", "&nbsp;");
        html = html.replaceAll("'", "&#39;&#39;");
        html = html.replaceAll("\"", "&quot;");
        html = html.replaceAll("\n", "<br/>");

        return html;
    }

    /**
     * 将文本内容过滤成网页文本
     * 
     * @param text
     *            要过滤的文本
     * @return 过滤后的网页文本
     */
    public static String toHtml(String text) {
        text = text.replaceAll("&amp;", "&");
        text = text.replaceAll("&lt;", "<");
        text = text.replaceAll("&gt;", ">");
        text = text.replaceAll("&nbsp;", " ");
        text = text.replaceAll("&#39;&#39;", "'");
        text = text.replaceAll("&quot;", "\"");
        text = text.replaceAll("<br/>", "\n");

        return text;
    }

    /**
     * 将整数转换成货币格式的字符串(#,##0)
     * 
     * @param money
     *            需转换的整数 (long)
     * @return 货币格式字符串(#,##0)
     */
    public static String getMoneyFormat(long money) {
        DecimalFormat df = new DecimalFormat("#,##0");

        return df.format(money);
    }

    /**
     * 将浮点数转换成货币格式的字符串(#,##0.00)
     * 
     * @param money
     *            需转换的浮点数 (double)
     * @return 货币格式字符串(#,##0.00)
     */
    public static String getMoneyFormat(double money) {
        DecimalFormat df = new DecimalFormat("#,##0.00");

        return df.format(money);
    }

    /**
     * 利用MD5算法对字符串进行加密
     * 
     * @param str
     *            待加密的字符串
     * @return 加密后的字符串
     */
    public static String md5CodeEncrypt(String str) {
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E', 'F' };
        byte[] tempStr = str.getBytes();
        MessageDigest md = null;
        try {
            // 使用MD5创建MessageDigest对象
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            // 没有这种产生消息摘要的算法
            e.printStackTrace();
        }
        md.update(tempStr);
        byte[] result = md.digest();
        int length = result.length;
        char md5Code[] = new char[length * 2];
        int k = 0;
        for (int i = 0; i < length; i++) {
            byte b = result[i];
            md5Code[k++] = hexDigits[b >> 4 & 0xf];
            md5Code[k++] = hexDigits[b & 0xf];
        }

        return new String(md5Code);
    }

    /**
     * 利用MD5算法对字符串进行加密,生成32位的16进制字串
     * 
     * @param str
     * @return 加密后的字符串
     */
    public static String encodeMD5Hex(String str) {
        MessageDigest md = null;
        StringBuffer md5Buf = null;
        try {
            md = MessageDigest.getInstance("MD5");
            md.update(str.getBytes("US-ASCII"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        byte[] digest = md.digest();
        md5Buf = new StringBuffer();
        for (int i = 0; i < digest.length; i++) {
            md5Buf.append(Character.forDigit((digest[i] & 0xF0) >> 4, 16));
            md5Buf.append(Character.forDigit((digest[i] & 0xF), 16));
        }

        return md5Buf.toString();
    }

    /**
     * 创建带前缀的ID值,例如:生成数据库中的ID主健值。
     * 
     * @param maxId
     *            所有连续ID值中最大的ID, 程序将根据maxId生成比该maxId值大1的连续ID值。 <br/>
     *            如:有GB000001、GB000002、GB000003这三个连续的ID值, 那么最大的ID值就是GB000003, <br/>
     *            这时程序生成的连续ID值就是GB000004。
     * @param headId
     *            头ID标识。如:规定要生成的ID值是GB000001这种形式的值, 那么GB就是头ID标识,即前缀。
     * @return 生成比maxId值大1的连续ID值。
     */
    public static String buildAssignedId(String maxId, String headId) {
        // 手动指派的ID值
        String buildId = null;
        // 补零
        StringBuffer fillZero = null;
        // 数字位的位数
        int numberBit = maxId.replaceFirst(headId, "").length();
        // 获得当前数字
        int number = Integer.parseInt(maxId.replaceFirst(headId, ""));
        // 获得下一位数字的位数
        int nextNumBit = String.valueOf(number + 1).length();
        // 产生下一位数字
        number += 1;
        // 创建手动指派的ID值
        if (numberBit - nextNumBit > 0) {
            fillZero = new StringBuffer();
            // 补零
            for (int i = 0; i < numberBit - nextNumBit; i++) {
                fillZero.append(0);
            }
            buildId = headId + fillZero.toString() + number;
        } else {
            buildId = headId + number;
        }

        return buildId;
    }

    /**
     * 批量创建带前缀的ID值,例如:生成数据库中的ID主健值。
     * 
     * @param maxId
     *            所有连续ID值中最大的ID, 程序将根据该maxId生成比该maxId值大1的连续ID值。<br/>
     *            如:有GB000001、GB000002、GB000003这三个连续ID值, 那么最大的ID值就是GB000003,<br/>
     *            这时程序生成的连续ID值就是GB000004。
     * @param headId
     *            头ID标识,如:规定要生成的ID值是GB000001这种形式的值, 那么GB就是头ID标识,即前缀。
     * @param idNum
     *            要批量生成的连续ID的数量。如要批量生成5个连续的ID,则该数量应该是5
     * @return 生成比maxId大1的连续ID值的List列表
     */
    public static List<String> buildAssignedIds(String maxId, String headId,
            int idNum) {
        // 已创建的ID列表
        List<String> idList = new ArrayList<String>();
        // 手动指派的ID值
        String buildId = null;
        // 补零
        StringBuffer fillZero = null;
        // 数字位的位数
        int numberBit = maxId.replaceFirst(headId, "").length();
        // 获得当前数字
        int number = Integer.parseInt(maxId.replaceFirst(headId, ""));
        // 获得下一位数字的位数
        int nextNumBit = String.valueOf(number + 1).length();
        // 产生下一位数字
        for (int i = 0; i < idNum; i++) {
            number += 1;

            if (numberBit - nextNumBit > 0) {
                if (fillZero == null)
                    fillZero = new StringBuffer();
                // 补零
                for (int j = 0; j < numberBit - nextNumBit; j++) {
                    fillZero.append(0);
                }
                buildId = headId + fillZero.toString() + number;
                // 获得下一位数字的位数
                nextNumBit = String.valueOf(number + 1).length();
                // 重置fillZero
                fillZero.delete(0, fillZero.length());

                idList.add(buildId);
            } else {
                buildId = headId + number;
                // 获得下一位数字的位数
                nextNumBit = String.valueOf(number + 1).length();

                idList.add(buildId);
            }
        }

        return idList;
    }

    /**
     * 去除字符串前后的半角和全角空格
     * 
     * @param str
     *            要去空格的字符串
     * @return 去除前后的半角和全角空格后的字符串
     */
    public static String trim(String str) {
        int start = 0;
        int len = str.length();
        int end = len;

        while ((start < len)
                && (str.charAt(start) == ' ' || str.charAt(start) == ' ')) {
            start++;
        }

        while ((start < end)
                && (str.charAt(end - 1) == ' ' || str.charAt(end - 1) == ' ')) {
            end--;
        }

        return ((start > 0) || (end < len)) ? str.substring(start, end) : str;
    }
}



我写代码Verstion都是从0.1开始的,这个是最新的版本(v1.1)也是就第十一个版本,如果以后有了更改再更新代码和版本。
大家如果发现什么Bug或有什么建议都可以提出来,为我的下一个版本添砖加瓦,谢谢!
1
0
分享到:
评论

相关推荐

    android开发各种工具类

    自己整理的平时比较有用的工具类,省去开发时间

    工具类 很多

    在java的日常开发和使用中,往往会涉及到日期,数学计算,系统参数等各种小的需求。在java的API包中,为开发者提供了诸多实用且快捷的工具类。整理如下: 一、System类:包含一些有用的字段和方法。另外,第一,该...

    基于J2EE框架的个人博客系统项目毕业设计论...

    可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图...

    Android-development-summary:Android开发常见的开源库,工具,开源项目源码分析,博客,公众号,减少查找资料的时间

    刚开始接触某人新兴的技术,总是在网上漫无目的的搜索各种文章,而这些文章良莠不齐的,浪费时间来辨别这些东西是否对自己有用。后来在github上面看到了很多优秀的开源项目,浏览器收藏夹也不知道到底收藏了多少,...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图...

    EXCEL集成工具箱V6.0

    【屏幕取色】 经典的屏幕取色工具,可取任意一处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之一。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...

    GNU-Makefile中文手册-Ver3.8.pdf

    如果大家对这些工具的用法不是 很熟悉,可参考项目资料 阅读本文的几点建议: 如果之前你对 没有了解、当前也不想深入的学习 的读 者。可只阅读本文各章节前半部分的内容(作为各章节的基础知识) 如果你已经对 比较熟悉...

    zxing.java源码解析-allUtils:搜集工具类

    只是暂存本人使用过和见过有用的工具类,实力不足非我原创),顾名思义“曾繁添的生活”,我是一个追求技术的代码狂,我的生活很单纯,占据我大部分生活的是代码,在工作之余整理/沉淀自己所学、所能,一方面可以记录...

    高级开发spring面试题和答案.pdf

    面试高级开发的期间整理的面试题目,记录我面试遇到过的spring题目以及答案 目录 spring ThreadLocal的底层对象; 为什么@Service和@Repository放到实现类上面而不是接口类上面; spring 三种注入(就是从spring容器...

    程序开发原理:抽象、规格与面向对象设计.[美]Barbara Liskov(带详细书签).pdf

    该书的前8章首次提出编程领域中的一些十分有用的抽象概念,如过程抽象、迭代抽象以及最重要的数据抽象等。此外,本书通过大量的例子,用非形式化的规范来详细定义这些数据抽象,描述模块所需完成的任务,并定义了...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    percona-toolkit使用教程

    percona-toolkit是一组...这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个优秀的DBA,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。 -- 自己测试整理下。

    EXCEL集成工具箱V8.0完整增强版(精简)

    【屏幕取色】 经典的屏幕取色工具,可取任意一处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之一。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...

    Toad 使用快速入门

    这个窗口可以处理大到4GB 的内容,对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地找到相关位置。在运行结果窗口可提供用户定义的配置功能,支持LONG 和LONG RAW列,可以将数据卸出到磁盘、打印...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java”详细目录   写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD...

    数据分析.doc

    数据分析 定义:是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理 解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用 信息和形成结论而对数据加以详细研究和...

    XML高级编程

    相同类型的元素可能因为它们父元素的不同,或者周边显示的不同而以不同的面貌出现在大家面前。第9章将告诉编程者根据适当的环境,在需要时把XML转换成适合显示的某些其他格式的技术。这正是数据驱动的样式化的核心...

Global site tag (gtag.js) - Google Analytics