`
lvinie
  • 浏览: 113867 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

实用的工具类

    博客分类:
  • java
阅读更多

 

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;

/**
 * 编码工具类,包括: <br>
 * 1)MD5/SHA编码 <br>
 * 2)Base64编码 <br>
 * 3)DES/ThreeDES编码 <br>
 * 4)GBK/UTF-8/ISO-8859-1/UNICODE转换 <br>
 */
public class CoderUtil 
{
    public static final String ALGORITHM_MD5 = "MD5";
    
    /**
     * MD5 编码,返回本地编码字符串
     * 
     * @param src 源串
     * @param encoding 编码
     * @return 目标串
     */
     public static String md5Encoder(String src, String encoding) 
     {
         if (src == null)
             return null;
         
         byte[] destBytes = md5EncoderByte(src, encoding);
         String dest = "";
         for (int i = 0; i < 16; i++) 
         {
             dest += byteToHEX(destBytes[i]);
         }
         
         return dest;
     }
     
    /**
     * MD5 编码,返回本地编码字符串
     * 
     * @param src 源串 默认使用UTF-8编码
     * @return 目标串
     */
     public static String md5Encoder(String src) 
     {
         return md5Encoder(src, "UTF-8");
     }
     
       /**
      * MD5编码,返回byte数组,本地编码
      * 
      * @param src 源串 默认使用UTF-8编码
      * @return 目标编码
      */
     public static byte[] md5EncoderByte(String src)
     {
         return md5EncoderByte(src, "UTF-8");
     }
     
     /**
      * MD5编码,返回byte数组
      * 
      * @param src 源串
      * @param encoding 编码 
      * @return 目标编码
      */
     public static byte[] md5EncoderByte(String src, String encoding)
     {
         if (src == null)
             return null;
         
        try
        {
            if (encoding == null)
                return md5EncoderByte(src.getBytes());
            else
                return md5EncoderByte(src.getBytes(encoding));
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
            return null;
        }
     }

     /**
      * MD5编码,返回byte数组
      * 
      * @param buf 源byte数组
      * @return 目标编码
      */
     public static byte[] md5EncoderByte(byte[] buf)
     {
         if (buf == null)
             return null;
         
         try
         {
             MessageDigest md5Temp = MessageDigest.getInstance(ALGORITHM_MD5);
             return md5Temp.digest(buf);
         }
         catch(Exception e)
         {
             e.printStackTrace();
             return null;
         }
    }
     
    /**
     * Base64 编码
     * 
     * @param src 源串
     * @return 目标串
     */
    public static String base64Encode(String src) 
    {
        if (src == null)
            return null;
        
        return base64Encode(src.getBytes());
    }
    
    /**
     * Base64 编码
     * 
     * @param src 源串
     * @return 目标串
     */
    public static String base64Encode(byte[] src) 
    {
        if (src == null)
            return null;
        
        return new String(Base64.encodeBase64(src));
    }

       /**
     * Base64 编码
     * 
     * @param src 源串
     * @return 目标串
     */
    public static String base64Encode(String src, String encoding) 
    {
        if (src == null)
            return null;
        
        try
        {
            byte[] dest = Base64.encodeBase64(src.getBytes(encoding));
            
            return new String(dest, encoding);
        }
        catch (UnsupportedEncodingException e)
        {
            throw new IllegalArgumentException(e);
        }
    }

    /**
     * Base64 解码
     * 
     * @param dest 目标串
     * @return 源编码
     */
    public static byte[] base64DecodeBytes(String dest) 
    {
        if (dest == null)
            return null;
        
        return Base64.decodeBase64(dest.getBytes());
    }
    
    /**
     * Base64 解码
     * 
     * @param dest 目标串
     * @return 源串
     */
    public static String base64Decode(String dest) 
    {
        if (dest == null)
            return null;
        
        byte[] b = Base64.decodeBase64(dest.getBytes());
        return new String(b);
    }

    /**
     * Base64 解码
     * 
     * @param dest 目标串
     * @return 源串
     */
    public static String base64Decode(String dest, String encoding) 
    {
        if (dest == null)
            return null;
        try
        {
            byte[] b = Base64.decodeBase64(dest.getBytes(encoding));
            return new String(b, encoding);
        }
        catch (UnsupportedEncodingException e)
        {
            throw new IllegalArgumentException(e);
        }
    }

    /**
     * Base64 解码
     * 
     * @param dest 目标串
     * @return 源编码
     */
    public static byte[] base64DecodeBytes(String dest, String encoding) 
    {
        if (dest == null)
            return null;
        
        try
        {
            return Base64.decodeBase64(dest.getBytes(encoding));
        }
        catch (UnsupportedEncodingException e)
        {
            throw new IllegalArgumentException(e);
        }
    }
    
    /**
     * 把字节转换为16进制字符
     * 
     * @param ib
     * @return
     */
    public static String byteToHEX(byte ib) 
    {
        char[] Digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        char [] ob = new char[2];
        ob[0] = Digit[(ib >>> 4) & 0X0F];
        ob[1] = Digit[ib & 0x0F];
        String s = new String(ob);
        return s;
    }
  
    /**
     * 给定一个url,和key,取得value
     * 此方法仅供参考,不作解释
     * @param url
     * @param key
     * @return String 给定一个url,和key,取得value
     */
    public static String getURLValue(String url,String key)
    {
        if(isEmpty(url) || isEmpty(key))
            return "";

        int p = url.indexOf("?");
        if (p != -1)
            url = url.substring(p);
        
        if (!url.startsWith("?"))
            url = "?" + url;
        
        int index = url.indexOf(key);
        if(index == -1)
            return "";
        
        if ((url.charAt(index-1) != '?' && url.charAt(index-1) != '&') 
            || index+key.length()>=url.length() || url.charAt(index+key.length()) != '=')
            return "";

        int point = index + key.length();
        int valueIndex = url.indexOf('&',point);
        if (valueIndex == -1)
            return url.substring(point+1,url.length());
        
        return url.substring(point+1,valueIndex);
    }
    
    /** 检查字符串是否为空 */
    private static boolean isEmpty(String s)
    {
        return ((s == null) || (s.trim().length() == 0));
    }
    
    /**
     * 读取XML中字段的值,允许没有field时返回空字符串
     * 此方法仅供参考,不作解释
     * @param xml XML字符串
     * @param field 字段名
     * @return 返回XML中字段中的值
     * @throws Exception 如果字段内容不符合要求,则抛出此异常
     */
    public static String getXmlField(String xml, String field) throws Exception
    {
        if (xml.length() < field.length() * 2 + 5)
        {
            throw new Exception("xml tag #"+field+"# format error");
        }
        
        String lField = "<"+field+">";
        String rField = "</"+field+">";
        int iLeft = xml.indexOf(lField);
        int iRight = xml.indexOf(rField);
        if (iLeft == -1 && iRight == -1)
            return "";
        
        if ((iLeft == -1 && iRight != -1) || (iLeft != -1 && iRight == -1))
        {
            throw new Exception("xml tag #"+field+"# format error");
        }
        
        int valueLen = iRight - iLeft - lField.length();
        if (valueLen <= 0)
            return "";
        
        return xml.substring(iLeft + lField.length(), iRight);
    }
    
    /**
     * 读取XML中字段的int值 
     * 此方法仅供参考,不作解释
     * @param xml XML字符串
     * @param field 字段名
     * @return int 返回XML中字段中的int值
     * @throws Exception 如果字段不是int或格式不正确,则抛出此异常
     */
    public static int getXmlFieldInt(String xml, String field) throws Exception
    {
        if (xml.length() < field.length() * 2 + 5)
        {
            throw new Exception("xml tag #"+field+"# format error");
        }

        String lField = "<"+field+">";
        String rField = "</"+field+">";
        int iLeft = xml.indexOf(lField);
        int iRight = xml.indexOf(rField);
        if (iLeft == -1 || iRight == -1)
        {
            throw new Exception("xml tag #"+field+"# format error");
        }
        
        int valueLen = iRight - iLeft;
        if (valueLen < 1)//nubmer不允许为空
        {
            throw new Exception("xml tag #"+field+"# format error");
        }
        
        String valueInt = xml.substring(iLeft + lField.length(), iRight);
        if (!isInteger(valueInt))
        {
            throw new Exception("xml tag #"+field+"# format error");
        }
        
        return Integer.parseInt(valueInt);
    }
    
    /** 检查是否是整型 */
    private static boolean isInteger(String s)
    {
        if (isEmpty(s))
            return false;

        // 逐个检查,如果出现一个字符不是数字则返回false
        for (int i = 0; i < s.length(); i++)
        {
            if ("0123456789".indexOf(s.charAt(i)) == -1)
                return false;
        }

        return true;
    }
}
分享到:
评论

相关推荐

    C# Util 实用工具类

    为了提高开发效率,程序员们常常会创建一些实用工具类库,如"C# Util",它整合了多种常用的功能模块,使得代码复用变得更为便捷。下面将详细阐述这个工具类库中的主要组成部分及其应用场景。 1. **Json**: JSON...

    android工具类 26个实用工具类

    这里提到的"android工具类 26个实用工具类"是一个集合,包含了多个针对Android开发的便捷函数。这些工具类可能包括网络请求、数据处理、UI操作、文件操作等多个方面,对于新手和有经验的开发者来说,都是提高开发...

    AS程序员实用工具类

    "AS程序员实用工具类"正是这样一种提升开发效率的解决方案。GreenSock(简称GS)是一个广受欢迎的库,它为ActionScript 3.0提供了丰富的动画和工具类,能够帮助程序员更加高效地创建交互式内容和动态效果。 ...

    提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C .zip

    提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C。.zip提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C。.zip提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C。.zip提供Swift丰富...

    实用工具类AjaxResponse

    这个名为"实用工具类AjaxResponse"的工具类设计旨在提供一种高效且统一的方式来处理服务器端的返回信息。 Lambda表达式的引入,使得代码更加简洁、可读性强,是Java 8之后的重要特性。在这个AjaxResponse类中,...

    常用、实用工具类

    "常用、实用工具类"这个标题暗示了我们讨论的是一些在日常编程和系统管理中不可或缺的工具。这些工具可能涵盖多个领域,如代码编辑器、版本控制系统、调试器、性能分析工具等。以下将详细介绍一些常见的实用工具及其...

    JAVA实用工具类

    JAVA实用工具类

    实用工具类

    在IT行业中,开发效率是至关重要的,为了提高开发效率,开发者往往会积累并整理出一系列的“实用工具类”。这些工具类通常包含了各种常见任务的解决方案,可以被复用于多个项目,避免了每次遇到相同问题时都需要重新...

    C#常用工具类代码集合Util(自己工作总结)

    "MJ.Util"、"MJ.Util.Extension"和"MJ.Util.Model"这三个文件名暗示了这个压缩包可能包含了C#中的实用工具类、扩展方法以及数据模型类。 1. **MJ.Util**: 这个命名很可能代表了一个包含各种通用功能的工具类库。...

    基于Java的Android主流第三方组件与实用工具类设计源码

    该项目是一个基于Java语言的Android应用开发包,整合了主流的第三方组件、自定义控件和实用工具类,旨在加速APP开发流程。项目共包含1472个文件,其中Java源文件636个,XML配置文件401个,PNG图片文件244个,JAR包...

    Excel表格操作实用工具类

    本实用工具类利用Java编程语言中的泛型、反射和Apache POI库,实现了对Excel表格的强大功能,以适应各种实体封装的报表表格需求。 首先,让我们深入理解一下核心概念: 1. **泛型**:Java泛型是一种在编译时检查...

    Android-CakeUtility-CakePHP实用工具类

    "Android-CakeUtility"项目就是这样一个工具集,它借鉴了CakePHP框架中的实用工具类,为Android开发者提供了方便的功能。让我们详细了解一下这个项目所包含的一些关键知识点。 1. **Inflector**: Inflector是 ...

    Java访问MongoDB实用工具类

    为了方便Java程序员与MongoDB交互,通常会创建一些实用工具类,将常见的数据库操作封装起来,降低代码复杂性。本篇文章将详细介绍如何利用提供的"Java访问MongoDB实用工具类"进行高效开发。 首先,`mongodb....

    基于Java的Android开发实用工具类集合设计源码

    该项目为Android开发者量身打造的实用工具类集合设计源码,包含666个文件,涵盖323个Java源文件、153个XML配置文件、158个PNG图片文件以及少量其他类型文件。集成了支付宝支付、微信支付(统一下单)、微信分享、Zip...

    基于Kotlin的Android开发实用工具类集合设计源码

    该项目是一款基于Kotlin的Android开发实用工具类集合设计源码,包含958个文件,包括402个Kotlin文件、246个XML配置文件、207个PNG图片文件、56个Java文件、9个Gradle文件、8个Git忽略文件、8个JPG图片文件、7个...

    提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C.zip

    这个名为"提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C.zip"的资源包显然是为了帮助开发者提升Swift项目的效率和代码复用性。它包含了一系列预定义的扩展和实用工具类,这些工具可能涵盖了字符串处理...

Global site tag (gtag.js) - Google Analytics