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个 字符
* 就可以使用此函数调用示例
* 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[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转为"",把" "替换为" ",回车替换为"<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[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", " "));
*/
/* 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));
}
}
-------------------------------------------------------------------------------------------------
毕业后头五年决定你的一生 海量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面试题和答案--重要知识点都涉及到了