java開發過程常用基礎函數

package tools;

import java.util.*;
import java.text.*; //日期處理用到的包
import java.util.regex.*;
import java.lang.*;
import java.math.*;

/**
  * <p>Title: 常用基礎函數</p>
  * <p>Description: 以下全部是靜態函數</p>
  * <p>Copyright: Copyright (c) 2005</p>
  * <p>Company: 靜靖工作室</p>
  * “@deprecated Method方法名 is deprecated” 在方法的註釋里加上此註釋,表示此方法以後版本不再被支持。
  * 文件註釋只能寫在import後,類定義前才能在javadoc中出現文件的註釋
  * @author 歐朝敬
  * QQ:35712069
  * 手機:13873195792
  * @version 1.0
  */
public class BaseFunction {
     public BaseFunction() {

    }

    /**
      * 拼合一維數組爲字符串。
      * <B>拆分字串按指定字符分解到一維數組使用String類的split(String regex)</B>
      * @param param String[] 數組
      * @param spilt String 字符串之單的分離符
      * @return String
      */
     public static String arrayToString(String[] param, String spilt) {
         String rentunstring;
         StringBuffer tempstr = new StringBuffer();
         int len = param.length;
         for (int i = 0; i < len - 1; i++) {
             tempstr.append(param);
             tempstr.append(spilt);
         }
         tempstr.append(param[len - 1]);
         rentunstring = tempstr.toString();
         return rentunstring;
     }

    /**
      * 產生在start和end之間的num個隨機整數,返回值存在HashMap中。
      * 示例
      * HashMap hm=BaseFunction.random(1,100,5);
      * Set set=hm.keySet();
      * Iterator it=set.iterator();
      * while(it.hasNext()){
      *     System.out.println(hm.get(it.next()));
      * }
      * @param start int 起始點
      * @param end int 結束點
      * @param num int 生成個數
      * @return HashMap
      */
     public static HashMap random(int start, int end, int num) {
         HashMap hashMap = new HashMap();
         for (int i = 0; i < num; i++) {
             double sru = Math.random() * end;
             int tag = Math.round((float) sru);
             if (tag < start) {
                 i--;
             } else {
                 hashMap.put(new Integer(i), new Integer(tag));
             }
         }
         return hashMap;
     }


    /**
      * 獲取當前時間,返回時間格式(如果調用參數爲true時返回yyyy-MM-dd HH:mm:ss
      * ,否則爲false時返回yyyy-MM-DD不帶日期格式)
      * @param time boolean
      * @return String
      * @throws Exception
      */
     public static String getNowTime(boolean time) throws java.lang.Exception {
         Date now = new Date();
         String format = "";
         //yyyy-MM-dd HH:mm:ss:S 年月日時分秒毫杪
         if (time) {
             format = "yyyy-MM-dd HH:mm:ss";
         } else {
             format = "yyyy-MM-dd";
         }
         SimpleDateFormat sdf = new SimpleDateFormat(format);
         String nowtime = sdf.format(now);
         return nowtime;
     }
  /**
   * 獲取當前時間自己定義
   *
   * @param format 格式   例yyyy年MM月dd日 HH時mm分ss杪
   * @return String
   * @throws Exception
   */
  public static String getNowTime(String format) {
   String nowtime = "";
   try {
    Date now = new Date();
    // String format = "";
    // yyyy-MM-dd HH:mm:ss:S 年月日時分秒毫杪
    // if (time) {
    // format = "yyyy-MM-dd HH:mm:ss";
    // } else {
    // format = "yyyy-MM-dd";
    // }
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    nowtime = sdf.format(now);
   } catch (Exception ex) {
    ex.printStackTrace();
   }
   return nowtime;
  }
     /**
      * 將HashMap內容轉入數組,
      * 示例
      *    HashMap hashMap = new HashMap();
      *    hashMap.put("ka", "bb");
      *    hashMap.put("kb", "cc");
      *    hashMap.put("jk", "fdsaf");
      *    hashMap.put("ak", "kkkkk");
      *    Object[] obj = BaseFunction.hashMapToArray(hashMap);
      *    for (int i = 0; i < obj.length; i++) {
      *        System.out.println(obj);
      *    }
      * @param param HashMap
      * @return Object[]
      */
     public static Object[] hashMapToArray(HashMap param) {
         int size = param.size();
         if (param == null || param.size() == 0) {
             return null;
         }
         Object[] obj = new Object[size];
         Set set = param.keySet();
         Iterator ite = set.iterator();
         for (int i = 0; ite.hasNext(); i++) {
             obj = param.get(ite.next());
         }
         return obj;
     }

    /**
      * 日期轉字符串
      * 示例:dateToString(stringToDate("2005-5-2 0:0:10"));
      * @param date Date
      * @return String
      * 返回字符串格式爲“yyyy年MM月dd日 HH時mm分ss秒”或“yyyy年MM月dd日”
      * 根據輸入的日期是否含有時間來確定輸出格式
      */
     public static String dateToString(Date date) {
         Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"),
                                                  Locale.CHINA);
         calendar.clear();
         calendar.setTimeInMillis(date.getTime());
         String format = "";

        /*        if (calendar.get(Calendar.MILLISECOND) == 0 &&
                     calendar.get(Calendar.SECOND) == 0 &&
          calendar.get(Calendar.SECOND) == calendar.get(Calendar.MINUTE) &&
          calendar.get(Calendar.MINUTE) == calendar.get(Calendar.HOUR)) {
                     format = "yyyy'年'MM'月'dd'日'";
                 } else {
                  format = "yyyy'年'MM'月'dd'日' HH'時'mm'分'ss'秒'";
                 }
          */
         format = "yyyy'年'MM'月'dd'日' HH'時'mm'分'ss'秒'";
         String return_string = "";
         SimpleDateFormat sdf = new SimpleDateFormat(format);
         //yyyy-MM-dd HH:mm:ss:S 年月日時分秒毫杪
         return_string = sdf.format(date);
         return return_string;
     }

    /**
      * 字符串轉日期
      * 示例:stringToDate("2005-5-2 0:0:10");
      * @param str String
      * 輸入字符串日期可用三種格式
      * yyyy-MM-dd HH:mm:ss完整式
      * yyyy-MM-dd HH:mm不含秒
      * yyyy-MM-dd只有日期不含時間
      * @return Date
      * @throws Exception
      */
     public static Date stringToDate(String str) throws Exception {
         Date return_date = null;
         String format = "";
         if (str.length() > 13) {
             format = "yyyy-MM-dd HH:mm:ss";
         } else if (str.length() > 10) {
             format = "yyyy-MM-dd HH:mm";
         } else {
             format = "yyyy-MM-dd";
         }
         try {
             SimpleDateFormat sdf = new SimpleDateFormat(format);
             return_date = sdf.parse(str);
         } catch (ParseException e) {
             throw new Exception(
                     "輸入字符串的格式出錯(格式爲yyyy-MM-dd/yyyy-MM-dd HH:mm/yyyy-MM-dd HH:mm:ss):" +
                     e.getMessage());
         }
         return return_date;
     }

    /**
      * 連續產生指定個數的字符串
      * @param str String
      * @param count int
      * @return String
      */
     public static String continuousMakeString(String str, int count) {
         StringBuffer sb = new StringBuffer();
         for (int i = 0; i < count; i++) {
             sb.append(str);
         }
         return (sb.toString());
     }

    /**
      * 將字符串開頭的所有空格替換成指定的字符
      * 在JSP中經常用到把字符串開頭的n個空格替換成n個 字符
      * 就可以使用此函數調用示例
      * replaceStartsWithSpace("  中國  湖南  長沙"," ");結果爲“  中國  湖南  長沙”
      * @param str String
      * @param sub String
      * @return String
      */
     public static String replaceStartsWithSpace(String str, String sub) {
         String returnStr = "";
         String regEx = "//S"; //非空格字符
         Pattern pattern = Pattern.compile(regEx);
         Matcher matcher = pattern.matcher(str);
         matcher.find();
         int start = matcher.start(); //非空格開始的位置
         for (int i = 0; i < start; i++) {
             returnStr = returnStr + sub;
         }
         returnStr = returnStr + str.substring(start);
         return returnStr;
     }

    /**
      * 查找指定的元素是否存在於元素數組中
      * 使用Object支持各種對象數組
      * 示例
      * String[] des = {"ada", "ss", "dd","aa"};
      * System.out.println(BaseFunction.contains(str, "adfab"));
      * @param objArray Object[]
      * @param value Object
      * @return int 如果查到則返回第一次在數組中出現的下標值,查不到則返回值爲-1
      */
     public static int contains(Object[] objArray, Object value) {
         int j = -1;
         for (int i = 0; i < objArray.length; i++) {
             if (objArray.equals(value)) { //查到則返回下標
                 j = i;
                 break;
             }
         }
         return j;
     }

    /**
      * 字符串數組中是否包含指定的字符串。
      * @param strings 字符串數組
      * @param string 字符串
      * @param caseSensitive 是否大小寫敏感(true區分大小寫,false不區分大小寫)
      * @return 包含時返回true,否則返回false
      * @since  0.4
      */
     public static boolean contains(String[] strings, String string,
                                    boolean caseSensitive) {
         for (int i = 0; i < strings.length; i++) {
             if (caseSensitive == true) {
                 if (strings.equals(string)) {
                     return true;
                 }
             } else {
                 if (strings.equalsIgnoreCase(string)) {
                     return true;
                 }
             }
         }
         return false;
     }

    /**
      * 數組拷貝,建議使用System.arraycopy()速度更快,把source數據內容拷貝到destination中
      * 使用Object則支持多種對象數組
      * 示例
      * String[] des = {"ada", "ss", "dd","aa"};
      * String[] src = new String[8];
      * BaseFunction.copy(des, src);
      * @param source Object[]
      * @param destination Object[]
      */
     public static void copy(Object[] source, Object[] destination) {
         if (destination == null || source == null) {
             throw new java.lang.NullPointerException("數組沒有初始化!");
         }
         if (destination.length < source.length) {
             throw new java.lang.ArrayIndexOutOfBoundsException("兩數組長度不相等!");
         }
         for (int i = 0; i < source.length; i++) {
             destination = source;
         }
     }

    /**
      * 去除數組中的重複元素,調用示例
      * String[] src = {"dafdfad", "asdfasdf", "dafdfad", "adfasdf", "dafdfad","dafdfad"};
      * Object[] test =BaseFunction.wipeOffRepeat(src);
      * @param objArray Object[]
      * @return Object[]
      */
     public static Object[] wipeOffRepeat(Object[] objArray) {
         Object[] obj = null;
         ArrayList list = new ArrayList();
         for (int i = 0; i < objArray.length; i++) {
             list.add(objArray);
         }
         //去除list中的重複對象
         HashSet h = new HashSet(list);
         list.clear();
         list.addAll(h);
         obj = list.toArray();
         return obj;
     }

    /**
      * 四捨五入
      * @param param double 要進行四捨五入的值
      * @param num int 保留的小數位數
      * @return String
      */
  public static String round(double param, int num) {
   DecimalFormat df=new DecimalFormat();
   String format="###0.";
   for(int i=0;i<num;i++){
    format=format+"#";
   }
   df.applyPattern(format);
   return df.format(param);
  }

    /**
      * 傳入的對象爲null時,轉換爲""
      * @param obj Object
      * @return String
      */
     public static String transition(Object obj) {
         String re = "";
         if (obj != null) {
             re = obj.toString();
         }
         return re;
     }

    /**
      * 格式化字符串爲Html格式,如str爲null轉爲"",把" "替換爲" ",回車替換爲"<br>"
      * @param str String
      * @return String
      */
     public static String formatHtml(String str) {
         String re = "";
         if (str != null) {
             re = str.replaceAll(" ", " ").replaceAll("/n", "<br>");
         }
         return re;
     }

  
     /**
      * 中文轉unicode
      * @param str
      * @return 反回unicode編碼
      */
     public static String  chinaToUnicode(String str)
     {
         String result ="";
         for (int i = 0; i < str.length(); i++)
         {
             int chr1 = (char) str.charAt(i);
             result  += "//u" + Integer.toHexString(chr1);          
         }
         return result;
     }

    /**
      * unicode轉中文
      * @param  str
      * @return 中文
      */
      public static String unicodeToChinese(String str)
      {       
          String re="";
          for(char c : str.toCharArray()){
           re=re+c;           
              //System.out.print(c);
         }
         return re;
      }
    
    
   /**/// /
   // / 轉全角的函數(SBC case)
   // /任意字符串
   // /全角字符串
   // /全角空格爲12288,半角空格爲32
   // /其他字符半角(33-126)與全角(65281-65374)的對應關係是:均相差65248
   public static String ToSBC(String input) {
    // 半角轉全角:
    char[] c = input.toCharArray();
    for (int i = 0; i < c.length; i++) {
     if (c == 32) {
      c = (char) 12288;
      continue;
     }
     if (c < 127)
      c = (char) (c + 65248);
    }
    return new String(c);
   }

  /**/// /
   // / 轉半角的函數(DBC case)
   // /任意字符串
   // /半角字符串
   // /全角空格爲12288,半角空格爲32
   // /其他字符半角(33-126)與全角(65281-65374)的對應關係是:均相差65248
   // /
   public static String ToDBC(String input) {
    char[] c = input.toCharArray();
    for (int i = 0; i < c.length; i++) {
     if (c == 12288) {
      c = (char) 32;
      continue;
     }
     if (c > 65280 && c < 65375)
      c = (char) (c - 65248);
    }
    return new String(c);
   }
 
     /**
      * 主函數做測試用
      * @param args String[]
      * @throws Exception
      */
     public static void main(String[] args) throws Exception {
         /*        System.out.println(BaseFunction.dateToString(stringToDate(
                         "2005-5-2 0:0:10")));
                 System.out.println(BaseFunction.getTime(true));
                 System.out.println(BaseFunction.continuousMakeString(" ", 10));
                 System.out.println(BaseFunction.replaceStartsSpace(
                         " fadsfas   dfsd", " "));
          */
         /*        HashMap hm=BaseFunction.random(1,100,5);
                 Set set=hm.keySet();
                 Iterator it=set.iterator();
                 while(it.hasNext()){
                     System.out.println(hm.get(it.next()));
                 }
          */
         //System.out.println(BaseFunction.replaceStartsWithSpace("  中國  湖南  長沙"," "));
//        System.out.println(BaseFunction.round(0.25689, 2));
//    //java的float、double相加不精確的小數位,使用如下方式解決
//  BigDecimal bd=new BigDecimal(12.36645593);
//  System.out.println(bd.add(new BigDecimal(1002)).add(new BigDecimal(123.366544)).doubleValue());
      //System.out.println(BaseFunction.chinaToUnicode("註冊碼"));
      //System.out.println(BaseFunction.unicodeToChinese("/u6ce8/u518c/u7801"));
    
   String BJstr = "Hello! 123456 湖南長沙";
   String QJstr = ToSBC(BJstr);
   System.out.println(BJstr + "  半角轉全角  " + QJstr);
   System.out.println(QJstr + "  全角轉半角  " + ToDBC(QJstr));
     }
}

作者:xi_hong_shi

發佈了28 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章