`
vipbooks
  • 浏览: 152188 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类

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

阅读更多
  这是我在做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
分享到:
评论

相关推荐

    自己整理的C#常用工具类

    在C#编程中,开发人员经常需要创建工具类来封装常用的功能,以便在项目中重复使用,提高代码的可重用性和效率。标题中的“自己整理的C#常用工具类”正是这样一个集合,包含了多种实用的功能。下面将详细介绍这些功能...

    整理的java工具类

    Java工具类是程序员在开发过程中经常使用的一类代码集合,它们提供了一系列静态方法,用于解决常见的编程问题,提高代码的可复用性和效率。这里我们主要关注两个压缩包中的内容:“实现了排列组合算法的类(JAVA)....

    java常用工具类已经打成jar包包含源码

    通过这种方式,可以逐步积累和整理项目中常用的功能,形成一套适合自己团队的工具集,进一步提升开发效率。 总的来说,这个"java常用工具类已经打成jar包包含源码"的资源,是一个非常有价值的开发辅助工具,它提供...

    PHP项目开发中最常用的自定义函数整理.doc

    在PHP项目开发中,自定义函数是提升代码可读性和效率的重要工具。这些函数通常针对特定项目需求进行定制,能够简化常见的操作。以下是一些在PHP工程开发中最常用的自定义函数,它们涵盖了数据处理、安全防护、随机...

    Python项目开发实战:AI智能图像识别工具(案例教程实例课程).pdf

    ### Python项目开发实战:AI智能图像识别工具 #### 项目背景与意义 随着人工智能技术的飞速发展,图像识别技术已经...以上内容涵盖了基于Python开发AI智能图像识别工具的关键知识点和技术细节,希望对你有所帮助。

    工具类 很多

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

    微信小程序的常用功能整理(封装的wx.request请求方法,腾讯地图定位+位置选择+距离计算,utils工具类(常用方法的封装))

    在微信小程序开发中,开发者经常会遇到各种功能需求,如数据的网络请求、地图服务的集成以及通用工具类的创建。本篇文章将详细讲解这些关键知识点,以帮助你更好地理解和运用。 首先,我们要讨论的是`wx.request`的...

    软件开发项目中比较全面的各种规程大集合

    在软件开发领域,规程是确保项目顺利进行、提高团队协作效率和产品质量的重要工具。"软件开发项目中比较全面的各种规程大集合" 提供了一个全面的参考资料,涵盖了开发过程中的多个关键环节。以下是对这些规程的详细...

    超好用的磁盘整理工具

    Defraggler是这款磁盘整理工具的名字,由知名软件公司Piriform开发。它提供了一种高效的方式来整理硬盘上的碎片,使得文件能够连续存储,从而提高磁盘的读写速度。Defraggler相比其他磁盘整理工具,有以下几个显著...

    Visual C++开发工具与调试技巧整理

    - **注意事项**:在创建过程中可以选择现有项目作为模板,并对其中的 AppWizard 进行自定义设置。 #### 17. 解决 Visual C++ 6.0 的文件时间戳问题 - **问题描述**:当项目中的某些文件时间戳与编译系统的时间不...

    freemaker导出word的doc_docx_带动态图片及word转pdf工具类_jar_万能整理汇总rengm.zip

    使用这些JAR文件,开发者可以直接在项目中调用相应的API,而无需自己编写复杂的转换逻辑。 在实际应用中,开发人员需要了解Freemarker的基本语法,包括变量、表达式、指令和宏等,以便有效地构建模板。同时,理解...

    JavaFx 小项目 整理的

    E(fx)clipse简化了在Eclipse IDE中开发JavaFX应用程序的过程,提供了创建、运行和调试JavaFX项目的集成环境。通过这款插件,开发者可以轻松地配置项目结构,编写FXML布局文件,并利用内置的JavaFX透视图进行代码编辑...

    android开发中常用的Eclipse快捷键详细整理

    ### Android开发中常用的Eclipse快捷键详细整理 在Android开发过程中,使用Eclipse作为集成开发环境(IDE)是非常常见的选择。为了提高开发效率,熟练掌握Eclipse中的快捷键是必不可少的技能之一。本文将详细介绍一...

    简易C语言开发工具

    简易C语言开发工具可能提供了基本的项目管理功能,帮助用户整理和构建代码结构。 6. **版本控制集成**:尽管不是所有开发工具都包含这一功能,但对于协作开发来说,版本控制(如Git)的集成非常有用。但鉴于此工具...

    一些有用小工具合集

    标题中的“一些有用小工具合集”表明这是一个包含多种实用工具的集合,可能是为了提高工作效率或者解决特定技术问题而整理的资源包。描述中的“NULL”没有提供具体信息,但结合标签“源码”和“工具”,我们可以推测...

    Utils:整理平时用到的工具类

    在"Utils:整理平时用到的工具类"这个主题中,我们可以深入探讨Utils类的设计原则、常见的工具方法以及如何在实际项目中高效利用它们。 首先,Utils类的设计应遵循一定的规范。一般来说,Utils类是final的,不允许被...

    EditPlus软件开发工具

    对于文本操作,EditPlus的正则表达式搜索和替换功能非常强大,可以在整个项目中快速查找和替换特定模式,极大地提高了代码整理和调试的效率。 5. **宏录制与播放** 用户可以录制一系列操作为宏,然后随时回放,这...

    桌面整理工具fence

    在描述中提到,“个人见到的最好的免费桌面整理工具”,意味着Fences在用户界面设计(UI)方面表现优秀,它可能提供了直观易用的交互体验和美观的视觉效果。"看看人家老外是怎么做工具的,UI没的说"暗示了该软件的...

    vsnet开发模板大合集官方整理下载

    【标题】"vsnet开发模板大合集官方整理下载" 提供的是Visual Studio .NET(简称VS.NET)的开发模板集合,这些模板是由微软官方整理并提供的,旨在帮助开发者快速搭建项目,提高开发效率。VS.NET是微软的一款强大的...

    C#实用类集-DotNet.Utilities-整理完整版

    "DotNet.Utilities"看起来是一个专门为C#开发者设计的实用工具类库,提供了各种常用功能,方便在项目开发中快速实现特定任务。这个整理完整的版本应该包含了多个经过优化和测试的类,覆盖了常见的操作需求。 让我们...

Global site tag (gtag.js) - Google Analytics