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[i]);
            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[i]);
     *    }
     * @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[i] = 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個&nbsp;字符
     * 就可以使用此函數調用示例
     * replaceStartsWithSpace("  中國  湖南  長沙","&nbsp;");結果爲“&nbsp;&nbsp;中國  湖南  長沙”
     * @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[i].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[i].equals(string)) {
                    return true;
                }
            } else {
                if (strings[i].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[i] = source[i];
        }
    }

    /**
     * 去除數組中的重複元素,調用示例
     * 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[i]);
        }
        //去除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轉爲"",把" "替換爲"&nbsp;",回車替換爲"<br>"
     * @param str String
     * @return String
     */
    public static String formatHtml(String str) {
        String re = "";
        if (str != null) {
            re = str.replaceAll(" ", "&nbsp;").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[i] == 32) {
     c[i] = (char) 12288;
     continue;
    }
    if (c[i] < 127)
     c[i] = (char) (c[i] + 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[i] == 12288) {
     c[i] = (char) 32;
     continue;
    }
    if (c[i] > 65280 && c[i] < 65375)
     c[i] = (char) (c[i] - 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", "&nbsp;"));
         */
        /*        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("  中國  湖南  長沙","&nbsp;"));
//        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));
    }
}

 

-------------------------------------------------------------------------------------------------

畢業後頭五年決定你的一生                                    海量Android教程、開發資料和源碼

10類最急需IT人才:Java開發者居首                   給將成爲“Android高手”的10個建議 

成爲Java高手的25個學習目標--非常經典           Android 4.1果凍豆新特性詳解 

芯片巨頭海思和展訊:給中國芯片業帶來信心    海量經典Java教程、學習資料和源碼

Java侵權訴訟Google獲勝,Android厚積薄發       面試必備:Android筆試總結 

Android高手必須掌握的28大內容和10個建議     Android平臺研發人才缺口30萬 

Android開發環境安裝和配置步驟詳細圖解        2012國內移動App開發者大調查結果 

Windows 7下搭建android開發環境步驟圖解      Android 4.0的30個突出的新特性 

Android高手要經過的6個階段和6個境界           linux下搭建Android開發環境步驟 

從IT菜鳥變爲“IT骨幹開發者”的11個建議        程序員編程技術迅速提高的終極攻略 

2012世界各國人均GDP排名,中國超泰國           2012年全國各省平均工資排行 

2012年中國大學高校排行榜(580強排名)      中國各省市面積和人口數量排名 

中國百萬開發者大調查:程序員的薪水不錯     Java高手需要越過的10座高山

周立功談嵌入式:我的25年嵌入式生涯           Android和Java語言的異同和關係 

華爲中國區手機銷量達千萬,80%爲智能機        谷歌Android碎片化嚴重

2012年中國各省GDP和人均GDP排名              90後就業“錢景”:IT仍是最佳選擇

2012全球城市競爭力500強,69箇中國城市上榜   不要做浮躁的軟件工程師 

2012年世界500強,79家大陸香港臺灣公司上榜名單 給IT新兵的15個建議 

美國知名科技公司入門級軟件工程師的薪水排名  回顧Java經過的風風雨雨 

71道經典Android面試題和答案--重要知識點都涉及到了 

高校應屆畢業生“IT業”收入最高,Android技術最熱門 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章