/**  
    * 将某个日期以固定格式转化成字符串  
    *   
    * @param date  
    * @return String  
    */  
   public static String dateToStr(java.util.Date date)   
   {   
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
       String str = sdf.format(date);   
       return str;   
   }  
/**  
 * 判断任意一个整数是否素数  
 *   
 * @param n  
 * @return boolean  
 */  
public static boolean isPrimes(int n)   
{   
    for (int i = 2; i <= Math.sqrt(n); i++)   
    {   
        if (n % i == 0)   
        {   
            return false;   
        }   
    }   
    return true;   
}  
/**  
 * 获得任意一个整数的阶乘,递归  
  *   
 * @param n  
 * @return n!  
 */  
public static int factorial(int n)   
{   
    if (n == 1)   
    {   
        return 1;   
    }   
    return n * factorial(n - 1);   
}  
/**  
 * 将指定byte数组以16进制的形式打印到控制台  
  *   
 * @param hint String  
 * @param b byte[]              
 * @return void   
 */  
public static void printHexString(String hint, byte[] b)   
{   
    System.out.print(hint);   
    for (int i = 0; i < b.length; i++)   
    {   
        String hex = Integer.toHexString(b[i] & 0xFF);   
        if (hex.length() == 1)   
        {   
            hex = '0' + hex;   
        }   
        System.out.print(hex.toUpperCase() + " ");   
    }   
    System.out.println("");   
}  
常用的java函数(二) 常用字符串处理
 /**  
   * 分割字符串  
   *   
   * @param str String 原始字符串  
   * @param splitsign String 分隔符  
   * @return String[] 分割后的字符串数组  
   */  
  public static String[] split(String str, String splitsign) {   
    int index;   
    if (str == null || splitsign == null)   
      return null;   
    ArrayList al = new ArrayList();   
    while ((index = str.indexOf(splitsign)) != -1) {   
      al.add(str.substring(0, index));   
      str = str.substring(index + splitsign.length());   
    }   
    al.add(str);   
    return (String[]) al.toArray(new String[0]);   
  }   
  
  /**  
   * 替换字符串  
   *   
   * @param from String 原始字符串  
   * @param to String 目标字符串  
   * @param source String 母字符串  
   * @return String 替换后的字符串  
   */  
  public static String replace(String from, String to, String source) {   
    if (source == null || from == null || to == null)   
      return null;   
    StringBuffer bf = new StringBuffer("");   
    int index = -1;   
    while ((index = source.indexOf(from)) != -1) {   
      bf.append(source.substring(0, index) + to);   
      source = source.substring(index + from.length());   
      index = source.indexOf(from);   
    }   
    bf.append(source);   
    return bf.toString();   
  }   
  
  /**  
   * 替换字符串,能能够在HTML页面上直接显示(替换双引号和小于号)  
   *   
   * @param str String 原始字符串  
   * @return String 替换后的字符串  
   */  
  public static String htmlencode(String str) {   
    if (str == null) {   
      return null;   
    }   
  
    return replace("\"", """, replace("<", "<", str));   
  }   
  
  /**  
   * 替换字符串,将被编码的转换成原始码(替换成双引号和小于号)  
   *   
   * @param str String  
   * @return String  
   */  
  public static String htmldecode(String str) {   
    if (str == null) {   
      return null;   
    }   
  
    return replace(""", "\"", replace("<", "<", str));   
  }   
  
  private static final String _BR = "<br/>";   
  
  /**  
   * 在页面上直接显示文本内容,替换小于号,空格,回车,TAB  
   *   
   * @param str String 原始字符串  
   * @return String 替换后的字符串  
   */  
  public static String htmlshow(String str) {   
    if (str == null) {   
      return null;   
    }   
  
    str = replace("<", "<", str);   
    str = replace(" ", " ", str);   
    str = replace("\r\n", _BR, str);   
    str = replace("\n", _BR, str);   
    str = replace("\t", "    ", str);   
    return str;   
  }   
  
  /**  
   * 返回指定字节长度的字符串  
   *   
   * @param str String 字符串  
   * @param length int 指定长度  
   * @return String 返回的字符串  
   */  
  public static String toLength(String str, int length) {   
    if (str == null) {   
      return null;   
    }   
    if (length <= 0) {   
      return "";   
    }   
    try {   
      if (str.getBytes("GBK").length <= length) {   
        return str;   
      }   
    } catch (Exception ex) {   
    }   
    StringBuffer buff = new StringBuffer();   
  
    int index = 0;   
    char c;   
    length -= 3;   
    while (length > 0) {   
      c = str.charAt(index);   
      if (c < 128) {   
        length--;   
      } else {   
        length--;   
        length--;   
      }   
      buff.append(c);   
      index++;   
    }   
    buff.append(" ");
");   
    return buff.toString();   
  }   
  
  /**  
   * 判断是否为整数  
   *   
   * @param str 传入的字符串  
   * @return 是整数返回true,否则返回false  
   */  
  public static boolean isInteger(String str) {   
    Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");   
    return pattern.matcher(str).matches();   
  }   
  
  /**  
   * 判断是否为浮点数,包括double和float  
   *   
   * @param str 传入的字符串  
   * @return 是浮点数返回true,否则返回false  
   */  
  public static boolean isDouble(String str) {   
    Pattern pattern = Pattern.compile("^[-\\+]?[.\\d]*$");   
    return pattern.matcher(str).matches();   
  }   
  
  /**  
   * 判断输入的字符串是否符合Email样式.  
   *   
   * @param str 传入的字符串  
   * @return 是Email样式返回true,否则返回false  
   */  
  public static boolean isEmail(String str) {   
    Pattern pattern = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");   
    return pattern.matcher(str).matches();   
  }   
  
  /**  
   * 判断输入的字符串是否为纯汉字  
   *   
   * @param str 传入的字符窜  
   * @return 如果是纯汉字返回true,否则返回false  
   */  
  public static boolean isChinese(String str) {   
    Pattern pattern = Pattern.compile("[\u0391-\uFFE5]+$");   
    return pattern.matcher(str).matches();   
  }   
  
  /**  
   * 是否为空白,包括null和""  
   *   
   * @param str  
   * @return  
   */  
  public static boolean isBlank(String str) {   
    return str == null || str.trim().length() == 0;   
  }   
  
  /**  
   * 判断是否为质数  
   *   
   * @param x  
   * @return  
   */  
  public static boolean isPrime(int x) {   
    if (x <= 7) {   
      if (x == 2 || x == 3 || x == 5 || x == 7)   
        return true;   
    }   
    int c = 7;   
    if (x % 2 == 0)   
      return false;   
    if (x % 3 == 0)   
      return false;   
    if (x % 5 == 0)   
      return false;   
    int end = (int) Math.sqrt(x);   
    while (c <= end) {   
      if (x % c == 0) {   
        return false;   
      }   
      c += 4;   
      if (x % c == 0) {   
        return false;   
      }   
      c += 2;   
      if (x % c == 0) {   
        return false;   
      }   
      c += 4;   
      if (x % c == 0) {   
        return false;   
      }   
      c += 2;   
      if (x % c == 0) {   
        return false;   
      }   
      c += 4;   
      if (x % c == 0) {   
        return false;   
      }   
      c += 6;   
      if (x % c == 0) {   
        return false;   
      }   
      c += 2;   
      if (x % c == 0) {   
        return false;   
      }   
      c += 6;   
    }   
    return true;   
  }   
    /**  
     * 全角字符转半角字符  
     *   
     * @param QJStr  
     * @return String  
     */  
    public static final String QJToBJChange(String QJStr)   
    {   
        char[] chr = QJStr.toCharArray();   
        String str = "";   
        for (int i = 0; i < chr.length; i++)   
        {   
            chr[i] = (char) ((int) chr[i] - 65248);   
            str += chr[i];   
        }   
        return str;   
    }   
    /**  
     * 去掉字符串中重复的子字符串  
     *   
     * @param str  
     * @return String  
     */  
    private static String removeSameString(String str)   
    {   
        Set<String> mLinkedSet = new LinkedHashSet<String>();   
        String[] strArray = str.split(" ");   
        StringBuffer sb = new StringBuffer();   
  
        for (int i = 0; i < strArray.length; i++)   
        {   
            if (!mLinkedSet.contains(strArray[i]))   
            {   
                mLinkedSet.add(strArray[i]);   
                sb.append(strArray[i] + " ");   
            }   
        }   
        System.out.println(mLinkedSet);   
        return sb.toString().substring(0, sb.toString().length() - 1);   
      }   
//过滤特殊字符   
public static String encoding(String src){   
        if (src==null)   
            return "";   
        StringBuilder result=new StringBuilder();   
        if (src!=null){   
            src=src.trim();   
            for (int pos=0;pos<src.length();pos++){   
                switch(src.charAt(pos)){   
                    case '\"':result.append(""");break;   
                    case '<':result.append("<");break;   
                    case '>':result.append(">");break;   
                    case '\'':result.append("'");break;   
                    case '&':result.append("&");break;   
                    case '%':result.append("&pc;");break;   
                    case '_':result.append("&ul;");break;   
                    case '#':result.append("&shap;");break;   
                    case '?':result.append("&ques;");break;   
                    default:result.append(src.charAt(pos));break;   
                }   
            }   
        }   
        return result.toString();   
    }   
       
//反过滤特殊字符   
    public static String decoding(String src){   
        if (src==null)   
            return "";   
        String result=src;   
        result=result.replace(""", "\"").replace("'", "\'");   
        result=result.replace("<", "<").replace(">", ">");   
        result=result.replace("&", "&");   
        result=result.replace("&pc;", "%").replace("&ul", "_");   
        result=result.replace("&shap;", "#").replace("&ques", "?");   
        return result;   
    }   
  
/**   
    *判断任意一个整数是否素数   
    *@paramn   
    *@return boolean   
    */    
    public boolean isPrimes(int n)    
    {    
      for (int i = 2; i <= Math.sqrt(n); i++) {    
          if(n%i==0)    
          {    
              return false;    
          }    
      }    
      return true;    
    }   
 
常用的java函数(三)数据库连接
/* * Db.java  
Created on 2007年8月20日, 上午 8:37  
*/  
import java.io.*;   
import java.sql.*;   
import java.util.Properties;   
public class Db {   
    private String driver;   
    private String url;   
    private String user;   
    private String password;   
    private Connection conn;   
    private Statement stm;   
    private ResultSet rs;   
    public Db(){   
        this("DBConf.properties");   
    }   
    public Db(String conf) {   
        loadProperties(conf);   
        setConn();   
    }   
    public Connection getConn(){   
        return this.conn;   
    }   
  //handle the properties file to get the informations for connection   
    private void loadProperties(String conf){   
        Properties props = new Properties();   
        try {   
            props.load(new FileInputStream(conf));   
        } catch (FileNotFoundException e) {   
            e.printStackTrace();   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        this.driver = props.getProperty("driver");   
        this.url = props.getProperty("url");   
        this.user = props.getProperty("user");   
        this.password = props.getProperty("password");   
    }   
    //implement the Connection   
    private void setConn(){   
        try {   
            Class.forName(driver);   
            this.conn = DriverManager.getConnection(url,user,password);   
        } catch(ClassNotFoundException classnotfoundexception) {   
              classnotfoundexception.printStackTrace();   
            System.err.println("db: " + classnotfoundexception.getMessage());   
        } catch(SQLException sqlexception) {   
            System.err.println("db.getconn(): " + sqlexception.getMessage());   
        }   
    }   
       public void doInsert(String sql) {   
        try {   
            Statement statement = conn.createStatement();   
            int i = stm.executeUpdate(sql);   
        } catch(SQLException sqlexception) {   
            System.err.println("db.executeInset:" + sqlexception.getMessage());   
        }   
    }   
    public void doDelete(String sql) {   
        try {   
            stm = conn.createStatement();   
            int i = stm.executeUpdate(sql);   
        } catch(SQLException sqlexception) {   
            System.err.println("db.executeDelete:" + sqlexception.getMessage());   
        }   
    }   
    public void doUpdate(String sql) {   
        try {   
            stm = conn.createStatement();   
            int i = stm.executeUpdate(sql);   
        } catch(SQLException sqlexception) {   
            System.err.println("db.executeUpdate:" + sqlexception.getMessage());   
        }   
    }   
       
    public ResultSet doSelect(String sql) {   
        try {   
            stm = conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);   
            rs = stm.executeQuery(sql);   
        } catch(SQLException sqlexception) {   
            System.err.println("db.executeQuery: " + sqlexception.getMessage());   
        }   
        return rs;   
    }   
    public static void main(String[] args){   
        try{   
            Db db = new Db();   
            Connection conn = db.getConn();   
            if(conn != null && !conn.isClosed()) {   
                System.out.println("連結成功");   
                ResultSet rs = db.doSelect("select * from content");   
                while(rs.next()){   
                    System.out.println(rs.getString(1)+":"+rs.getString(2)+":"+rs.getString(3));   
                  }   
                rs.close();   
                conn.close();   
            }   
        }catch(SQLException e) {   
            e.printStackTrace();   
        }   
    }     
}  
常用的java函数(四)中文转拼音
/**  
 * <p>  
 * Title:   
 * Description:中文转换为拼音  
 * @version 1.0  
 */  
public class ChineseSpelling {   
  
private static int[] pyvalue = new int[] { -20319, -20317, -20304, -20295, -20292, -20283, -20265, -20257, -20242, -20230, -20051, -20036, -20032, -20026, -20002, -19990, -19986, -19982, -19976, -19805, -19784, -19775, -19774, -19763, -19756, -19751, -19746, -19741, -19739, -19728, -19725, -19715, -19540, -19531, -19525, -19515, -19500, -19484, -19479, -19467, -19289, -19288, -19281, -19275, -19270, -19263, -19261, -19249, -19243, -19242, -19238, -19235, -19227, -19224, -19218, -19212, -19038, -19023, -19018, -19006, -19003, -18996, -18977, -18961, -18952, -18783, -18774, -18773, -18763, -18756, -18741, -18735, -18731, -18722, -18710, -18697, -18696, -18526, -18518, -18501, -18490, -18478, -18463, -18448, -18447, -18446, -18239, -18237, -18231, -18220, -18211, -18201, -18184, -18183,   
            -18181, -18012, -17997, -17988, -17970, -17964, -17961, -17950, -17947, -17931, -17928, -17922, -17759, -17752, -17733, -17730, -17721, -17703, -17701, -17697, -17692, -17683, -17676, -17496, -17487, -17482, -17468, -17454, -17433, -17427, -17417, -17202, -17185, -16983, -16970, -16942, -16915, -16733, -16708, -16706, -16689, -16664, -16657, -16647, -16474, -16470, -16465, -16459, -16452, -16448, -16433, -16429, -16427, -16423, -16419, -16412, -16407, -16403, -16401, -16393, -16220, -16216, -16212, -16205, -16202, -16187, -16180, -16171, -16169, -16158, -16155, -15959, -15958, -15944, -15933, -15920, -15915, -15903, -15889, -15878, -15707, -15701, -15681, -15667, -15661, -15659, -15652, -15640, -15631, -15625, -15454, -15448, -15436, -15435, -15419, -15416, -15408, -15394,   
            -15385, -15377, -15375, -15369, -15363, -15362, -15183, -15180, -15165, -15158, -15153, -15150, -15149, -15144, -15143, -15141, -15140, -15139, -15128, -15121, -15119, -15117, -15110, -15109, -14941, -14937, -14933, -14930, -14929, -14928, -14926, -14922, -14921, -14914, -14908, -14902, -14894, -14889, -14882, -14873, -14871, -14857, -14678, -14674, -14670, -14668, -14663, -14654, -14645, -14630, -14594, -14429, -14407, -14399, -14384, -14379, -14368, -14355, -14353, -14345, -14170, -14159, -14151, -14149, -14145, -14140, -14137, -14135, -14125, -14123, -14122, -14112, -14109, -14099, -14097, -14094, -14092, -14090, -14087, -14083, -13917, -13914, -13910, -13907, -13906, -13905, -13896, -13894, -13878, -13870, -13859, -13847, -13831, -13658, -13611, -13601, -13406, -13404,   
            -13400, -13398, -13395, -13391, -13387, -13383, -13367, -13359, -13356, -13343, -13340, -13329, -13326, -13318, -13147, -13138, -13120, -13107, -13096, -13095, -13091, -13076, -13068, -13063, -13060, -12888, -12875, -12871, -12860, -12858, -12852, -12849, -12838, -12831, -12829, -12812, -12802, -12607, -12597, -12594, -12585, -12556, -12359, -12346, -12320, -12300, -12120, -12099, -12089, -12074, -12067, -12058, -12039, -11867, -11861, -11847, -11831, -11798, -11781, -11604, -11589, -11536, -11358, -11340, -11339, -11324, -11303, -11097, -11077, -11067, -11055, -11052, -11045, -11041, -11038, -11024, -11020, -11019, -11018, -11014, -10838, -10832, -10815, -10800, -10790, -10780, -10764, -10587, -10544, -10533, -10519, -10331, -10329, -10328, -10322, -10315, -10309, -10307,   
            -10296, -10281, -10274, -10270, -10262, -10260, -10256, -10254 };   
  
private static String[] pystr = new String[] { "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun",   
"guo", "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "lv", "luan", "lue", "lun", "luo", "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang", "niao",   
"nie", "nin", "ning", "niu", "nong", "nu", "nv", "nuan", "nue", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun",   
"tuo", "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo" };   
  
private StringBuilder buffer;   
  
private String resource;   
  
private static ChineseSpelling chineseSpelling = new ChineseSpelling();   
  
public static ChineseSpelling getInstance() {   
return chineseSpelling;   
}   
  
public String getResource() {   
return resource;   
}   
  
public void setResource(String resource) {   
        this.resource = resource;   
}   
  
private int getChsAscii(String chs) {   
int asc = 0;   
try {   
  
byte[] bytes = chs.getBytes("gb2312");   
  
if (bytes == null || bytes.length > 2 || bytes.length <= 0) { // 错误   
  
// log   
  
throw new RuntimeException("illegal resource string");   
// System.out.println("error");   
  
}   
if (bytes.length == 1) { // 英文字符   
  
                asc = bytes[0];   
}   
if (bytes.length == 2) { // 中文字符   
  
int hightByte = 256 + bytes[0];   
int lowByte = 256 + bytes[1];   
                asc = (256 * hightByte + lowByte) - 256 * 256;   
}   
} catch (Exception e) {   
            System.out.println("ERROR:ChineseSpelling.class-getChsAscii(String chs)" + e);   
// e.printStackTrace();   
  
}   
return asc;   
}   
  
public String convert(String str) {   
        String result = null;   
int ascii = getChsAscii(str);   
// System.out.println(ascii);   
  
if (ascii > 0 && ascii < 160) {   
            result = String.valueOf((char) ascii);   
} else {   
for (int i = (pyvalue.length - 1); i >= 0; i--) {   
if (pyvalue[i] <= ascii) {   
                    result = pystr[i];   
break;   
}   
}   
}   
return result;   
}   
  
public String getSelling(String chs) {   
        String key, value;   
        buffer = new StringBuilder();   
for (int i = 0; i < chs.length(); i++) {   
            key = chs.substring(i, i + 1);   
if (key.getBytes().length == 2) {   
                value = (String) convert(key);   
if (value == null) {   
                    value = "unknown";   
}   
} else {   
                value = key;   
}   
  
            buffer.append(value);   
}   
return buffer.toString();   
}   
  
public String getSpelling() {   
return this.getSelling(this.getResource());   
}   
  
public static void main(String[] args) {   
// ChineseSpelling finder = new ChineseSpelling();   
  
  
        ChineseSpelling finder = ChineseSpelling.getInstance();   
        finder.setResource("中文字符");   
        System.out.println(finder.getSpelling());   
        System.out.println(finder.getSelling("英文字符Eng"));   
}   
  
}  
常用的java函数(五)人民币转成大写
/**  
    * 人民币转成大写  
    *   
    * @param value  
    * @return String  
    */  
   public static String hangeToBig(double value)   
   {   
       char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示   
       char[] vunit = { '万', '亿' }; // 段名表示   
       char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示   
       long midVal = (long) (value * 100); // 转化成整形   
       String valStr = String.valueOf(midVal); // 转化成字符串   
  
       String head = valStr.substring(0, valStr.length() - 2); // 取整数部分   
       String rail = valStr.substring(valStr.length() - 2); // 取小数部分   
  
       String prefix = ""; // 整数部分转化的结果   
       String suffix = ""; // 小数部分转化的结果   
       // 处理小数点后面的数   
       if (rail.equals("00"))   
       { // 如果小数部分为0   
           suffix = "整";   
       }   
       else  
       {   
           suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来   
       }   
       // 处理小数点前面的数   
       char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组   
       char zero = '0'; // 标志'0'表示出现过0   
       byte zeroSerNum = 0; // 连续出现0的次数   
       for (int i = 0; i < chDig.length; i++)   
       { // 循环处理每个数字   
           int idx = (chDig.length - i - 1) % 4; // 取段内位置   
           int vidx = (chDig.length - i - 1) / 4; // 取段位置   
           if (chDig[i] == '0')   
           { // 如果当前字符是0   
               zeroSerNum++; // 连续0次数递增   
               if (zero == '0')   
               { // 标志   
                   zero = digit[0];   
               }   
               else if (idx == 0 && vidx > 0 && zeroSerNum < 4)   
               {   
                   prefix += vunit[vidx - 1];   
                   zero = '0';   
               }   
               continue;   
           }   
           zeroSerNum = 0; // 连续0次数清零   
           if (zero != '0')   
           { // 如果标志不为0,则加上,例如万,亿什么的   
               prefix += zero;   
               zero = '0';   
           }   
           prefix += digit[chDig[i] - '0']; // 转化该数字表示   
           if (idx > 0)   
               prefix += hunit[idx - 1];   
           if (idx == 0 && vidx > 0)   
           {   
               prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿   
           }   
       }   
  
       if (prefix.length() > 0)   
           prefix += '圆'; // 如果整数部分存在,则有圆的字样   
       return prefix + suffix; // 返回正确表示  
常用的java函数(六)异常处理类
/**  
 * (#)ThrowableManager.java    1.0    Apr 10, 2008  
 *   
 * Copyright 2007- wargrey , Inc. All rights are reserved.  
 */  
package net.wargrey.application;   
  
import java.awt.Component;   
import javax.swing.JOptionPane;   
  
/**  
 * This class <code>ExceptionManager</code> and its subclasses are a form of   
 * <code>Exception</code>. It is used to wrap all the <code>Throwable</code> instances  
 * and handle them in a unified way. It will show the information which consists of   
 * StackTraces and Messages by using JOptionPanel.  
 *   
 * @author Estelle  
 * @version 1.0  
 * @see java.lang.Exception  
 * @since jdk 1.5  
 */  
public class ExceptionManager extends Exception {   
       
    /**  
     * This field <code>alerter</code> is used to show the information the Class offered.  
     *   
     * @see javax.swing.JOptionPane  
     */  
    private JOptionPane alerter;   
       
    /**  
     * This static method create an instance of the ExceptionManager by invoking the   
     * constructor <code>ExceptionManager(String msg)</code>.  
     *   
     * @param msg    The message will pass the specified constructor  
     * @return    An instance of the ExceptionManager created by invoking the constructor  
     *             <code>ExceptionManager(String msg)</code>.  
     */  
    public static ExceptionManager wrap(String msg){   
        return new ExceptionManager(msg);   
    }   
       
    /**  
     * This static method create an instance of the ExceptionManager by invoking the   
     * constructor <code>ExceptionManager(Throwable throwable)</code>.  
     *   
     * @param throwable        The cause will pass the specified constructor  
     * @return    An instance of the ExceptionManager created by invoking the constructor  
     *             <code>ExceptionManager(Throwable throwable)</code>.  
     */  
    public static ExceptionManager wrap(Throwable throwable){   
        return new ExceptionManager(throwable);   
    }   
       
    /**  
     * This static method create an instance of the ExceptionManager by invoking the   
     * constructor <code>ExceptionManager(String msg,Throwable throwable)</code>.   
     *   
     * @param msg            The message will pass the specified constructor  
     * @param throwable        The cause will pass the specified constructor  
     * @return    An instance of the ExceptionManager created by invoking the constructor  
     *             <code>ExceptionManager(String msg, Throwable throwable)</code>  
     */  
    public static ExceptionManager wrap(String msg,Throwable throwable){   
        return new ExceptionManager(msg,throwable);   
    }   
       
    /**  
     * Constructs a new instance with the specified detail message. The concrete handler   
     * is its super class. This constructor always used to construct a custom exception  
     * not wrapping the exist exception.  
     *   
     * @param msg        the detail message which is the part of the information will be  
     *                     shown.  
     */  
    public ExceptionManager(String msg){   
        super(msg);   
    }   
       
    /**  
     * Constructs a new instance with the specified detail cause. The concrete handler   
     * is its super class. This constructor always used to wrap an exist exception.  
     *   
     * @param throwable        the cause which has been caught. It's detail message and   
     *                         stacktrace are the parts the information will be shown.  
     */  
    public ExceptionManager(Throwable throwable){   
        super(throwable);   
    }   
       
    /**  
     * Constructs a new instance with the specified detail message and cause. The   
     * concrete handler is its super class. This constructor always used to construct  
     * an exception wrapping the exist exception but requires a custom message.   
     *   
     * @param msg        the detail message which is the part of the information will   
     *                     be shown.  
     * @param throwable    the cause which has been caught. It's stacktrace is the parts  
     *                     the information will be shown.  
     */  
    public ExceptionManager(String msg,Throwable throwable){   
        super(msg,throwable);   
    }   
       
    /**  
     * Show the information with everything is default.  
     */  
    public synchronized void alert(){   
        alert((Component)null);   
    }   
       
    /**  
     * Show the information in a dialog with the specified title   
     * "ThrowableManager Alerter". The dialog belongs to the given component which   
     * default is the screen.   
     *   
     * @param parent    The component cause the exception.  
     */  
    public synchronized void alert(Component parent){   
        alert(parent,"ThrowableManager Alerter");   
    }   
       
    /**  
     * Show the information in a dialog with the specified title.  
     *   
     * @param title        The title of the dialog.  
     */  
    public synchronized void alert(String title){   
        alert((Component)null,title);   
    }   
       
    /**  
     * Show the information in a dialog which has the specified title and belongs to the  
     * specified component.  
     *   
     * @param parent    The component cause the exception.  
     * @param title        The title of the dialog.  
     */  
    public synchronized void alert(Component parent,String title){   
        StringBuilder errorMessage=new StringBuilder();   
        errorMessage.append(this.toString());   
        for (StackTraceElement st:((this.getCause()==null)?this:this.getCause()).getStackTrace()){   
            errorMessage.append("\n\t     at ");   
            errorMessage.append(st.toString());   
        }           
        alerter.showMessageDialog(parent, errorMessage, title ,JOptionPane.ERROR_MESSAGE);   
    }   
}  
常用的java函数(七)各类数据库连接
MySQL:       
    String Driver="com.mysql.jdbc.Driver";    //驱动程序   
    String URL="jdbc:mysql://localhost:3306/db_name";    //连接的URL,db_name为数据库名       
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).new Instance();   
    Connection con=DriverManager.getConnection(URL,Username,Password);   
Microsoft SQL Server 2.0驱动(3个jar的那个):   
    String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";    //连接SQL数据库的方法   
    String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name为数据库名   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).new Instance();    //加载数据可驱动   
    Connection con=DriverManager.getConnection(URL,UserName,Password);    //   
Microsoft SQL Server 3.0驱动(1个jar的那个): // 老紫竹完善   
    String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";    //连接SQL数据库的方法   
    String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name为数据库名   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).new Instance();    //加载数据可驱动   
    Connection con=DriverManager.getConnection(URL,UserName,Password);    //   
Sysbase:   
    String Driver="com.sybase.jdbc.SybDriver";    //驱动程序   
    String URL="jdbc:Sysbase://localhost:5007/db_name";    //db_name为数据可名   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).newInstance();       
    Connection con=DriverManager.getConnection(URL,Username,Password);   
Oracle(用thin模式):   
    String Driver="oracle.jdbc.driver.OracleDriver";    //连接数据库的方法   
    String URL="jdbc:oracle:thin:@loaclhost:1521:orcl";    //orcl为数据库的SID   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).newInstance();    //加载数据库驱动   
    Connection con=DriverManager.getConnection(URL,Username,Password);       
PostgreSQL:   
    String Driver="org.postgresql.Driver";    //连接数据库的方法   
    String URL="jdbc:postgresql://localhost/db_name";    //db_name为数据可名   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).newInstance();       
    Connection con=DriverManager.getConnection(URL,Username,Password);   
DB2:   
    String Driver="com.ibm.db2.jdbc.app.DB2.Driver";    //连接具有DB2客户端的Provider实例   
    //String Driver="com.ibm.db2.jdbc.net.DB2.Driver";    //连接不具有DB2客户端的Provider实例   
    String URL="jdbc:db2://localhost:5000/db_name";    //db_name为数据可名   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).newInstance();       
    Connection con=DriverManager.getConnection(URL,Username,Password);   
Informix:   
    String Driver="com.informix.jdbc.IfxDriver";       
    String URL="jdbc:Informix-sqli://localhost:1533/db_name:INFORMIXSER=myserver";    //db_name为数据可名   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).newInstance();       
    Connection con=DriverManager.getConnection(URL,Username,Password);   
JDBC-ODBC:   
    String Driver="sun.jdbc.odbc.JdbcOdbcDriver";   
    String URL="jdbc:odbc:dbsource";    //dbsource为数据源名   
    String Username="username";    //用户名   
    String Password="password";    //密码   
    Class.forName(Driver).newInstance();       
    Connection con=DriverManager.getConnection(URL,Username,Password); 
常用的java函数(八)TXT转XML
/*  
  *txt转换xml   
  */  
import java.io.BufferedReader;   
import java.io.BufferedWriter;   
import java.io.FileReader;   
import java.io.FileWriter;   
import java.util.StringTokenizer;   
  
public class TxtToXml {   
 private String strTxtFileName;   
  
 private String strXmlFileName;   
  
 public TxtToXml() {   
  strTxtFileName = new String();   
  strXmlFileName = new String();   
 }   
  
 public void createXml(String strTxt, String strXml) {   
  strTxtFileName = strTxt;   
  strXmlFileName = strXml;   
  String strTmp;   
  try {   
   BufferedReader inTxt = new BufferedReader(new FileReader(   
     strTxtFileName));   
   BufferedWriter outXml = new BufferedWriter(new FileWriter(   
     strXmlFileName));   
   outXml.write("<?xml version= \"1.0\" encoding=\"gb2312\"?>");   
   outXml.newLine();   
   outXml.write("<people>");   
   while ((strTmp = inTxt.readLine()) != null) {   
    StringTokenizer strToken = new StringTokenizer(strTmp, ",");   
    String arrTmp[];   
    arrTmp = new String[3];   
    for (int i = 0; i < 3; i++)   
     arrTmp[i] = new String("");   
    int index = 0;   
    outXml.newLine();   
    outXml.write("    <students>");   
    while (strToken.hasMoreElements()) {   
     strTmp = (String) strToken.nextElement();   
     strTmp = strTmp.trim();   
     arrTmp[index++] = strTmp;   
    }   
    outXml.newLine();   
    outXml.write("        <name>" + arrTmp[0] + "</name>");   
    outXml.newLine();   
    outXml.write("        <sex>" + arrTmp[1] + "</sex>");   
    outXml.newLine();   
    outXml.write("        <age>" + arrTmp[2] + "</age>");   
    outXml.newLine();   
    outXml.write("    </students>");   
   }   
   outXml.newLine();   
   outXml.write("</people>");   
   outXml.flush();   
  } catch (Exception e) {   
   e.printStackTrace();   
  }   
 }   
  
 public static void main(String[] args) {   
  String txtName = "testtxt.txt";   
  String xmlName = "testxml.xml";   
  TxtToXml thisClass = new TxtToXml();   
  thisClass.createXml(txtName, xmlName);   
 }   
}  
常用的java函数(九)时间计算函数
import java.text.DecimalFormat;   
import java.util.Arrays;   
  
/**  
 * 时间计算工具类  
 */  
public class Time {   
  
    /**  
     * 时间字段常量,表示“秒”  
      */  
    public final static int SECOND = 0;   
       
    /**  
     * 时间字段常量,表示“分”  
      */  
    public final static int MINUTE = 1;   
       
    /**  
     * 时间字段常量,表示“时”  
      */  
    public final static int HOUR = 2;   
       
    /**  
     * 时间字段常量,表示“天”  
      */  
    public final static int DAY = 3;   
  
    /**  
     * 各常量允许的最大值  
      */  
    private final int[] maxFields = { 59, 59, 23, Integer.MAX_VALUE - 1 };   
       
    /**  
     * 各常量允许的最小值  
      */  
    private final int[] minFields = { 0, 0, 0, Integer.MIN_VALUE };   
       
    /**  
     * 默认的字符串格式时间分隔符  
      */  
    private String timeSeparator = ":";   
       
    /**  
     * 时间数据容器  
      */  
    private int[] fields = new int[4];       
       
    /**  
     * 无参构造,将各字段置为 0  
     */  
    public Time() {   
        this(0, 0, 0, 0);   
    }   
  
    /**  
     * 使用时、分构造一个时间  
      * @param hour      小时  
      * @param minute    分钟  
      */  
    public Time(int hour, int minute) {   
        this(0, hour, minute, 0);   
    }   
  
    /**  
     * 使用时、分、秒构造一个时间  
      * @param hour      小时  
      * @param minute    分钟  
      * @param second    秒  
      */  
    public Time(int hour, int minute, int second) {   
        this(0, hour, minute, second);   
    }   
       
    /**  
     * 使用一个字符串构造时间<br/>  
     * Time time = new Time("14:22:23");  
     * @param time      字符串格式的时间,默认采用“:”作为分隔符  
      */  
    public Time(String time) {           
        this(time, null);   
    }   
  
    /**  
     * 使用天、时、分、秒构造时间,进行全字符的构造  
      * @param day       天  
      * @param hour      时  
      * @param minute    分  
      * @param second    秒  
      */  
    public Time(int day, int hour, int minute, int second) {   
        set(DAY, day);   
        set(HOUR, hour);   
        set(MINUTE, minute);   
        set(SECOND, second);   
    }     
       
    /**  
     * 使用一个字符串构造时间,指定分隔符<br/>  
     * Time time = new Time("14-22-23", "-");  
     * @param time      字符串格式的时间  
      */  
    public Time(String time, String timeSeparator) {   
        if(timeSeparator != null) {   
            setTimeSeparator(timeSeparator);   
        }   
        String pattern = patternQuote(this.timeSeparator);   
        String matcher = new StringBuffer()   
                                .append("\\d+?").append(pattern)   
                                .append("\\d+?").append(pattern)   
                                .append("\\d+?")   
                                .toString();   
        if(!time.matches(matcher)) {   
            throw new IllegalArgumentException(time + ", time format error, HH"  
                    + this.timeSeparator + "mm" + this.timeSeparator + "ss");   
        }           
        String[] times = time.split(pattern);   
        set(DAY, 0);   
        set(HOUR, Integer.parseInt(times[0]));   
        set(MINUTE, Integer.parseInt(times[1]));   
        set(SECOND, Integer.parseInt(times[2]));   
    }   
       
    /**  
     * 设置时间字段的值  
     * @param field     时间字段常量  
     * @param value     时间字段的值  
     */  
    public void set(int field, int value) {           
        if(value < minFields[field]) {   
            throw new IllegalArgumentException(value +   
                    ", time value must be positive.");   
        }   
        fields[field] = value % (maxFields[field] + 1);   
        // 进行进位计算   
         int carry = value / (maxFields[field] + 1);   
        if(carry > 0) {   
            int upFieldValue = get(field + 1);   
            set(field + 1, upFieldValue + carry);   
        }   
    }   
  
    /**  
     * 获得时间字段的值  
      * @param field     时间字段常量  
      * @return          该时间字段的值  
      */  
    public int get(int field) {   
        if(field < 0 || field > fields.length - 1) {   
            throw new IllegalArgumentException(field + ", field value is error.");   
        }   
        return fields[field];   
    }   
  
    /**  
     * 将时间进行“加”运算,即加上一个时间  
      * @param time      需要加的时间  
      * @return          运算后的时间  
      */  
    public Time addTime(Time time) {   
        Time result = new Time();   
        int up = 0;     // 进位标志   
         for (int i = 0; i < fields.length; i++) {   
            int sum = fields[i] + time.fields[i] + up;   
            up = sum / (maxFields[i] + 1);   
            result.fields[i] = sum % (maxFields[i] + 1);   
        }   
        return result;   
    }   
  
    /**  
     * 将时间进行“减”运算,即减去一个时间  
      * @param time      需要减的时间  
      * @return          运算后的时间  
      */  
    public Time subtractTime(Time time) {   
        Time result = new Time();   
        int down = 0;       // 退位标志   
         for (int i = 0, k = fields.length - 1; i < k; i++) {   
            int difference = fields[i] + down;   
            if (difference >= time.fields[i]) {   
                difference -= time.fields[i];   
                down = 0;   
            } else {   
                difference += maxFields[i] + 1 - time.fields[i];   
                down = -1;   
            }   
            result.fields[i] = difference;   
        }   
        result.fields[DAY] = fields[DAY] - time.fields[DAY] + down;   
        return result;   
    }   
       
    /**  
     * 获得时间字段的分隔符  
      * @return  
     */  
    public String getTimeSeparator() {   
        return timeSeparator;   
    }   
  
    /**  
     * 设置时间字段的分隔符(用于字符串格式的时间)  
      * @param timeSeparator     分隔符字符串  
      */  
    public void setTimeSeparator(String timeSeparator) {   
        this.timeSeparator = timeSeparator;   
    }   
  
    /**  
     * 正则表达式引用处理方法,源自 JDK @link java.util.regex.Pattern#quote(String)  
     */  
    private String patternQuote(String s) {   
        int slashEIndex = s.indexOf("\\E");   
        if (slashEIndex == -1)   
            return "\\Q" + s + "\\E";   
  
        StringBuilder sb = new StringBuilder(s.length() * 2);   
        sb.append("\\Q");   
        slashEIndex = 0;   
        int current = 0;   
        while ((slashEIndex = s.indexOf("\\E", current)) != -1) {   
            sb.append(s.substring(current, slashEIndex));   
            current = slashEIndex + 2;   
            sb.append("\\E\\\\E\\Q");   
        }   
        sb.append(s.substring(current, s.length()));   
        sb.append("\\E");   
        return sb.toString();   
    }   
  
    public String toString() {   
        DecimalFormat df = new DecimalFormat("00");   
        return new StringBuffer().append(fields[DAY]).append(", ")   
                    .append(df.format(fields[HOUR])).append(timeSeparator)   
                    .append(df.format(fields[MINUTE])).append(timeSeparator)   
                    .append(df.format(fields[SECOND]))   
                    .toString();   
    }   
  
    public int hashCode() {   
        final int PRIME = 31;   
        int result = 1;   
        result = PRIME * result + Arrays.hashCode(fields);   
        return result;   
    }   
  
    public boolean equals(Object obj) {   
        if (this == obj)   
            return true;   
        if (obj == null)   
            return false;   
        if (getClass() != obj.getClass())   
            return false;   
        final Time other = (Time) obj;   
        if (!Arrays.equals(fields, other.fields)) {   
            return false;   
        }   
        return true;   
    }   
}  
常用的java函数(十)随机函数
/**   
 * @author talent_marquis<��˺��>   
 * Email: talent_marquis@163.com   
 * Copyright (C) 2007 talent_marquis<��˺��>   
 * All rights reserved.   
 */   
package com.dextrys.trilogy.util;   
  
import java.util.Arrays;   
  
import org.eclipse.swt.graphics.RGB;   
  
public class RandomUtil   
{   
  
    /**  
     * @param args  
     */  
    public static void main( String[] args )   
    {   
        //System.out.println( getRandomNormalString( 8 ) );   
        int[] test = getRandomIntWithoutReduplicate( 0, 40, 39 );   
        Arrays.sort( test );   
        for( int i : test )   
        {   
            System.out.println( i );   
        }   
    }   
  
    /**  
     * get a integer array filled with random integer without reduplicate [min, max)  
     * @param min    the minimum value  
     * @param max the maximum value  
     * @param size the capacity of the array  
     * @return a integer array filled with random integer without redupulicate  
     */  
    public static int[] getRandomIntWithoutReduplicate( int min, int max, int size )   
    {   
        int[] result = new int[size];   
           
        int arraySize = max - min;   
        int[] intArray = new int[arraySize];   
        // init intArray   
        for( int i = 0 ; i < intArray.length ; i++ )   
        {   
            intArray[i] = i + min;   
        }   
        // get randome interger without reduplicate   
        for( int i = 0 ; i < size ; i++ )   
        {   
            int c = getRandomInt( min, max - i );   
            int index = c - min;   
            swap( intArray, index, arraySize - 1 - i );   
            result[i] = intArray[ arraySize - 1 - i ];   
        }   
                   
        return result;   
    }   
       
    private static void swap( int[] array, int x, int y )   
    {   
        int temp = array[x];   
        array[x] = array[y];   
        array[y] = temp;   
    }   
       
    /**  
     * get a random Integer with the range [min, max)  
     * @param min the minimum value  
     * @param max the maximum value  
     * @return the random Integer value  
     */  
    public static int getRandomInt( int min, int max )   
    {   
        // include min, exclude max   
        int result = min + new Double( Math.random() * ( max - min ) ).intValue();   
  
        return result;   
    }   
  
    /**  
     * get a random double with the range [min, max)  
     * @param min the minimum value  
     * @param max the maximum value  
     * @return the random double value  
     */  
    public static double getRandomDouble( double min, double max )   
    {   
        // include min, exclude max   
        double result = min + ( Math.random() * ( max - min ) );   
        return result;   
    }   
  
    /**  
     *   
     * @return a random char with the range ASCII 33(!) to ASCII 126(~)  
     */  
    public static char getRandomChar()   
    {   
        // from ASCII code 33 to ASCII code 126   
        int firstChar = 33; // "!"   
        int lastChar = 126; // "~"   
        char result = ( char ) ( getRandomInt( firstChar, lastChar + 1 ) );   
        return result;   
    }   
       
    /**  
     *   
     * @return a random rgb color  
     */  
    public static RGB getRandomRGB()   
    {   
        int red = getRandomInt(0,256);   
        int green = getRandomInt(0,256);   
        int blue = getRandomInt(0,256);   
           
        return new RGB( red, green, blue );   
    }   
       
    /**  
     *   
     * @return a random char with the range [0-9],[a-z],[A-Z]  
     */  
    public static char getRandomNormalChar()   
    {   
        // include 0-9,a-z,A-Z   
        int number = getRandomInt( 0, 62 );   
        int zeroChar = 48;   
        int nineChar = 57;   
        int aChar = 97;   
        int zChar = 122;   
        int AChar = 65;   
        int ZChar = 90;   
           
        char result;   
           
        if( number < 10 )   
        {   
            result =  ( char ) ( getRandomInt( zeroChar, nineChar + 1 ) );   
            return result;   
  
        }   
        else if( number >= 10 && number < 36 )   
        {   
            result = ( char ) ( getRandomInt( AChar, ZChar + 1 ) );   
            return result;   
        }   
        else if( number >= 36 && number < 62 )   
        {   
            result =  ( char ) ( getRandomInt( aChar, zChar + 1 ) );   
            return result;   
        }   
        else  
        {   
            return 0;   
        }   
    }   
  
    /**  
     *   
     * @param length the length of the String  
     * @return a String filled with random char  
     */  
    public static String getRandomString( int length )   
    {   
        // include ASCII code from 33 to 126   
        StringBuffer result = new StringBuffer();   
        for( int i = 0; i < length; i++ )   
        {   
            result.append( getRandomChar() );   
        }   
        return result.toString();   
    }   
       
    /**  
     *       
     * @param length the length of the String  
     * @return a String filled with normal random char  
     */  
    public static String getRandomNormalString( int length )   
    {   
        // include 0-9,a-z,A-Z   
        StringBuffer result = new StringBuffer();   
        for( int i = 0; i < length; i++)   
        {   
            result.append( getRandomNormalChar() );   
        }   
        return result.toString();   
    }   
}  
常用的java函数(十一)文件拷贝代码
import java.io.*;    
import java.util.ArrayList;    
import java.util.List;    
public class FileCopy {    
private String message = "";    
public String getMessage() {    
  return message;    
}    
public void setMessage(String message) {    
  this.message = message;    
}    
/**   
  * 将源文件拷贝到目标文件   
  *   
  * @param src   
  *            写源文件地址,需文件名   
  * @param des   
  *            写目标文件地址,无需文件名   
  */    
public boolean copyFile(String src, String des) {    
  File srcFile = new File(src);    
  File desDir = new File(des);    
  File desFile = new File(des + "/" + srcFile.getName());    
  // 判断源文件是否存在    
  if (!srcFile.exists()) {    
   this.setMessage("源文件不存在!");    
   return false;    
  } else if (!srcFile.isFile()) {    
   this.setMessage("源文件格式错!");    
   return false;    
  }    
  // 判断源文件是否存在    
  if (!desDir.exists()) {    
   this.setMessage("目标目录不存在!");    
   return false;    
  } else if (!desDir.isDirectory()) {    
   this.setMessage("不是有效的目录!");    
   return false;    
  }    
  BufferedReader reader = null;    
  BufferedWriter writer = null;    
  String str;    
  try {    
   reader = new BufferedReader(new FileReader(srcFile));    
   writer = new BufferedWriter(new FileWriter(desFile));    
   // 判断目标文件是否存在及其格式,不存在就创建,格式不对先删除,存在就替代    
   if (!desFile.exists() || !desFile.isFile()) {    
    if (desFile.exists()) {    
     desFile.delete();    
    }    
    desFile.createNewFile();    
   }    
   // 从源文件读取数据,并写入目标文件    
   str = reader.readLine();    
   while (str != null) {    
    writer.write(str);    
    writer.newLine();    
    str = reader.readLine();    
   }    
  } catch (IOException e) {    
   this.setMessage(e.getMessage());    
   return false;    
  } finally {    
   if (reader != null) {    
    try {    
     reader.close();    
    } catch (IOException e) {    
     this.setMessage(e.getMessage());    
    }    
   }    
   if (writer != null) {    
    try {    
     writer.close();    
    } catch (IOException e) {    
     this.setMessage(e.getMessage());    
    }    
   }    
  }    
  return true;    
}    
private List fileList = new ArrayList();    
  
/**   
  * 列出所有文件   
  * @param srcFile   
  */    
private void file(File srcFile) {    
  if (srcFile.isDirectory()) {    
   String[] files = srcFile.list();    
      
   for (int i = 0; i < files.length; i++) {    
    File f = new File(srcFile + "/" + files[i]);    
    // 如果是文件加入列表,否则递归列出    
    if (f.isFile()) {    
     fileList.add(f);    
    } else    
     file(f);    
   }    
  }else this.setMessage(srcFile.getAbsolutePath()+"不是目录");    
}    
/**   
  * 建立目录   
  * @param des   
  * @throws IOException   
  */private void mkdir(File des) {    
  if (!des.exists() || !des.isDirectory()) {    
   mkdir(des.getParentFile());    
   if (des.exists()) {    
    des.delete();    
   }    
   des.mkdir();    
  }    
}    
/**   
  * 复制目录  将源目录下所有文件拷贝到目标目录下   
  * @param src  源目录   
   * @param des  目标目录   
  */    
public boolean copyDir(String src, String des) {    
  File srcFile = new File(src);    
  if (!srcFile.exists()) {    
   this.setMessage("源目录不存在!");    
   return false;    
  } else if (!srcFile.isDirectory()) {    
   this.setMessage(src+"不是有效的目录!");    
   return false;    
  }    
  file(srcFile);    
      
  for (int i = 0; i < fileList.size(); i++) {    
   String srcName = ((File) fileList.get(i)).getPath();    
   String desName = srcName.substring(src.length(), srcName.length());    
   desName = des + desName;    
   File dir=new File(desName).getParentFile();    
   mkdir(dir);    
      
   if(!copyFile(srcName, dir.getPath())){    
    return false;    
   }    
  }    
  return true;    
}    
public static void main(String[] args) {    
  
  FileCopy t = new FileCopy();    
  System.out.println(t.copyFile("D:/aaa.txt","E:"));    
  String src="D:/asdf";    
  String des="E:/adf";    
  System.out.println(t.copyDir(src, des));    
  System.out.println(t.getMessage());    
}    
  
}  
常用的java函数(十二)正则表达式用于字符串处理
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。    
  
匹配中文字符的正则表达式: [\u4e00-\u9fa5]    
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了    
  
匹配双字节字符(包括汉字在内):[^\x00-\xff]    
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)    
  
匹配空白行的正则表达式:\n\s*\r    
评注:可以用来删除空白行    
  
匹配HTML标记的正则表达式: <(\S*?)[^>]*>.*? </\1> ¦ <.*? />    
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力    
  
匹配首尾空白字符的正则表达式:^\s* ¦\s*$    
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式    
  
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*    
评注:表单验证时很实用    
  
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*    
评注:网上流传的版本功能很有限,上面这个基本可以满足需求    
  
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$    
评注:表单验证时很实用    
  
匹配国内电话号码:\d{3}-\d{8} ¦\d{4}-\d{7}    
评注:匹配形式如 0511-4405222 或 021-87888822    
  
匹配腾讯QQ号:[1-9][0-9]{4,}    
评注:腾讯QQ号从10000开始    
  
匹配中国邮政编码:[1-9]\d{5}(?!\d)    
评注:中国邮政编码为6位数字    
  
匹配身份证:\d{15} ¦\d{18}    
评注:中国的身份证为15位或18位    
  
匹配ip地址:\d+\.\d+\.\d+\.\d+    
评注:提取ip地址时有用    
  
匹配特定数字:    
^[1-9]\d*$    //匹配正整数    
^-[1-9]\d*$   //匹配负整数    
^-?[1-9]\d*$   //匹配整数    
^[1-9]\d* ¦0$  //匹配非负整数(正整数 + 0)    
^-[1-9]\d* ¦0$   //匹配非正整数(负整数 + 0)    
^[1-9]\d*\.\d* ¦0\.\d*[1-9]\d*$   //匹配正浮点数    
^-([1-9]\d*\.\d* ¦0\.\d*[1-9]\d*)$  //匹配负浮点数    
^-?([1-9]\d*\.\d* ¦0\.\d*[1-9]\d* ¦0?\.0+ ¦0)$  //匹配浮点数    
^[1-9]\d*\.\d* ¦0\.\d*[1-9]\d* ¦0?\.0+ ¦0$   //匹配非负浮点数(正浮点数 + 0)    
^(-([1-9]\d*\.\d* ¦0\.\d*[1-9]\d*)) ¦0?\.0+ ¦0$  //匹配非正浮点数(负浮点数 + 0)    
评注:处理大量数据时有用,具体应用时注意修正    
  
匹配特定字符串:    
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串    
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串    
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串    
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串    
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串    
评注:最基本也是最常用的一些表达式   
常用的java函数(十三)日期公用处理类
import java.text.SimpleDateFormat;   
import java.util.ArrayList;   
import java.util.Calendar;   
import java.util.Date;   
import java.util.GregorianCalendar;   
import java.util.LinkedHashMap;   
  
/**  
 * 日期公用处理类  
 *   
 * @author SongJun  
 * @version 1.3  
 */  
public class DateUtil {   
    /**  
     * 解析一个日期之间的所有月份  
     *   
     * @param beginDateStr  
     * @param endDateStr  
     * @return  
     */  
    public static ArrayList getMonthList(String beginDateStr, String endDateStr) {   
        // 指定要解析的时间格式   
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM");   
        // 返回的月份列表   
        String sRet = "";   
  
        // 定义一些变量   
        Date beginDate = null;   
        Date endDate = null;   
  
        GregorianCalendar beginGC = null;   
        GregorianCalendar endGC = null;   
        ArrayList list = new ArrayList();   
  
        try {   
            // 将字符串parse成日期   
            beginDate = f.parse(beginDateStr);   
            endDate = f.parse(endDateStr);   
  
            // 设置日历   
            beginGC = new GregorianCalendar();   
            beginGC.setTime(beginDate);   
  
            endGC = new GregorianCalendar();   
            endGC.setTime(endDate);   
  
            // 直到两个时间相同   
            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {   
                sRet = beginGC.get(Calendar.YEAR) + "-"  
                        + (beginGC.get(Calendar.MONTH) + 1);   
                list.add(sRet);   
                // 以月为单位,增加时间   
                beginGC.add(Calendar.MONTH, 1);   
            }   
            return list;   
        } catch (Exception e) {   
            e.printStackTrace();   
            return null;   
        }   
    }   
  
    /**  
     * 解析一个日期段之间的所有日期  
     *   
     * @param beginDateStr  
     *            开始日期  
     * @param endDateStr  
     *            结束日期  
     * @return  
     */  
    public static ArrayList getDayList(String beginDateStr, String endDateStr) {   
        // 指定要解析的时间格式   
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");   
  
        // 定义一些变量   
        Date beginDate = null;   
        Date endDate = null;   
  
        Calendar beginGC = null;   
        Calendar endGC = null;   
        ArrayList list = new ArrayList();   
  
        try {   
            // 将字符串parse成日期   
            beginDate = f.parse(beginDateStr);   
            endDate = f.parse(endDateStr);   
  
            // 设置日历   
            beginGC = Calendar.getInstance();   
            beginGC.setTime(beginDate);   
  
            endGC = Calendar.getInstance();   
            endGC.setTime(endDate);   
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
  
            // 直到两个时间相同   
            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {   
  
                list.add(sdf.format(beginGC.getTime()));   
                // 以日为单位,增加时间   
                beginGC.add(Calendar.DAY_OF_MONTH, 1);   
            }   
            return list;   
        } catch (Exception e) {   
            e.printStackTrace();   
            return null;   
        }   
    }   
  
    public static ArrayList getYearList() {   
        ArrayList list = new ArrayList();   
        Calendar c = null;   
        c = Calendar.getInstance();   
        c.setTime(new Date());   
        int currYear = Calendar.getInstance().get(Calendar.YEAR);   
  
        int startYear = currYear - 5;   
        int endYear = currYear + 10;   
        for (int i = startYear; i < endYear; i++) {   
            list.add(new Integer(i));   
        }   
        return list;   
    }   
  
    public static int getCurrYear() {   
        return Calendar.getInstance().get(Calendar.YEAR);   
    }   
  
    /**  
     * 得到某一年周的总数  
     *   
     * @param year  
     * @return  
     */  
    public static LinkedHashMap getWeekList(int year) {   
        LinkedHashMap map = new LinkedHashMap();   
        Calendar c = new GregorianCalendar();   
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);   
        int count = getWeekOfYear(c.getTime());   
  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
        String dayOfWeekStart = "";   
        String dayOfWeekEnd = "";   
        for (int i = 1; i <= count; i++) {   
            dayOfWeekStart = sdf.format(getFirstDayOfWeek(year, i));   
            dayOfWeekEnd = sdf.format(getLastDayOfWeek(year, i));   
            map.put(new Integer(i), "第"+i+"周(从"+dayOfWeekStart + "至" + dayOfWeekEnd+")");   
        }   
        return map;   
  
    }   
       
    /**  
     * 得到一年的总周数  
     * @param year  
     * @return  
     */  
    public static int getWeekCountInYear(int year){   
        Calendar c = new GregorianCalendar();   
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);   
        int count = getWeekOfYear(c.getTime());   
        return count;   
    }   
  
    /**  
     * 取得当前日期是多少周  
     *   
     * @param date  
     * @return  
     */  
    public static int getWeekOfYear(Date date) {   
        Calendar c = new GregorianCalendar();   
        c.setFirstDayOfWeek(Calendar.MONDAY);   
        c.setMinimalDaysInFirstWeek(7);   
        c.setTime(date);   
  
        return c.get(Calendar.WEEK_OF_YEAR);   
    }   
  
    /**  
     * 得到某年某周的第一天  
     *   
     * @param year  
     * @param week  
     * @return  
     */  
    public static Date getFirstDayOfWeek(int year, int week) {   
        Calendar c = new GregorianCalendar();   
        c.set(Calendar.YEAR, year);   
        c.set(Calendar.MONTH, Calendar.JANUARY);   
        c.set(Calendar.DATE, 1);   
  
        Calendar cal = (GregorianCalendar) c.clone();   
        cal.add(Calendar.DATE, week * 7);   
  
        return getFirstDayOfWeek(cal.getTime());   
    }   
  
    /**  
     * 得到某年某周的最后一天  
     *   
     * @param year  
     * @param week  
     * @return  
     */  
    public static Date getLastDayOfWeek(int year, int week) {   
        Calendar c = new GregorianCalendar();   
        c.set(Calendar.YEAR, year);   
        c.set(Calendar.MONTH, Calendar.JANUARY);   
        c.set(Calendar.DATE, 1);   
  
        Calendar cal = (GregorianCalendar) c.clone();   
        cal.add(Calendar.DATE, week * 7);   
  
        return getLastDayOfWeek(cal.getTime());   
    }   
       
    /**  
     * 得到某年某月的第一天  
     * @param year  
     * @param month  
     * @return  
     */  
    public static Date getFirestDayOfMonth(int year,int month){   
        month = month-1;   
        Calendar   c   =   Calendar.getInstance();      
        c.set(Calendar.YEAR, year);   
        c.set(Calendar.MONTH, month);   
           
        int day = c.getActualMinimum(c.DAY_OF_MONTH);   
  
        c.set(Calendar.DAY_OF_MONTH, day);   
        return c.getTime();   
           
    }   
       
    /**  
     * 提到某年某月的最后一天  
     * @param year  
     * @param month  
     * @return  
     */  
    public static Date getLastDayOfMonth(int year,int month){   
        month = month-1;   
        Calendar   c   =   Calendar.getInstance();      
        c.set(Calendar.YEAR, year);   
        c.set(Calendar.MONTH, month);   
        int day = c.getActualMaximum(c.DAY_OF_MONTH);   
        c.set(Calendar.DAY_OF_MONTH, day);   
        return c.getTime();   
    }   
  
    /**  
     * 取得当前日期所在周的第一天  
     *   
     * @param date  
     * @return  
     */  
    public static Date getFirstDayOfWeek(Date date) {   
        Calendar c = new GregorianCalendar();   
        c.setFirstDayOfWeek(Calendar.MONDAY);   
        c.setTime(date);   
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday   
        return c.getTime();   
    }   
  
    /**  
     * 取得当前日期所在周的最后一天  
     *   
     * @param date  
     * @return  
     */  
    public static Date getLastDayOfWeek(Date date) {   
        Calendar c = new GregorianCalendar();   
        c.setFirstDayOfWeek(Calendar.MONDAY);   
        c.setTime(date);   
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday   
        return c.getTime();   
    }   
  
}