###一. java常用工具函数
1.1 日期函数
//计算的是两者的相差天数 结果为非负整数
public static int getWorkingDaysBetweenTwoDates(Date startDate, Date endDate) {
Calendar startCal;
Calendar endCal;
startCal = Calendar.getInstance();
startCal.setTime(startDate);
endCal = Calendar.getInstance();
endCal.setTime(endDate);
int workDays = 0;
// Return 0 if start and end are the same
if (startCal.getTimeInMillis() == endCal.getTimeInMillis()) {
return 0;
}
if (startCal.getTimeInMillis() > endCal.getTimeInMillis()) {
startCal.setTime(endDate);
endCal.setTime(startDate);
}
do {
startCal.add(Calendar.DAY_OF_MONTH, 1);
if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
&& startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
++workDays;
}
} while (startCal.getTimeInMillis() < endCal.getTimeInMillis());
return workDays;
}
//按照指定格式获取当前日期字符串
public static String getCurrentDate(String format) {
// TODO Auto-generated method stub
Date date = new Date();
return dateToString(date,format);
}
//将指定日期转换为字符串
private static String dateToString(Date date, String format) {
// TODO Auto-generated method stub
if(ClassUtil.isNull(format)){
format = "yyyy-MM-dd";
}
String newDate = "";
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
if (date != null) {
newDate = sdf.format(date);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return newDate;
}
//获取当前日期时间字符串
public static String getCurrentDateTimeStr(){
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date dd = new Date();
String str = format.format(dd);
return str;
}
//20170901 add 获取当前季度
public static String getCurrentQuarter(){
Calendar currentCal = Calendar.getInstance();
//currentCal.add(Calendar.MONTH,1);
Integer year = currentCal.get(Calendar.YEAR);
Integer month = currentCal.get(Calendar.MONTH); //当前月份减一
//System.out.println("year: " + year + "; month: " + month);
String quarter = "";
if(year.toString().length() == 4){
quarter = year.toString().substring(2, 4);
}
if(month >= 0 && month < 3){
quarter += "Q1";
}else if(month >= 3 && month < 6){
quarter += "Q2";
}else if(month >= 6 && month < 9){
quarter += "Q3";
}else if(month >= 9 && month < 12){
quarter += "Q4";
}
//System.out.println("quarter: " + quarter);
return quarter ;
}
1.2 工具函数
public class ClassUtil {
/**
* 输出对象的所有属性值
* */
public static String toString(Object obj){
String s = "";
try {
s = getPropertyString(obj);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
public static String getPropertyString(Object entityName) throws Exception {
Class<? extends Object> c = entityName.getClass();
Field field [] = c.getDeclaredFields();
StringBuffer sb = new StringBuffer();
sb.append("------ " + " begin ------\n");
for(Field f : field){
sb.append(f.getName());
sb.append(" : ");
sb.append(invokeMethod(entityName, f.getName(), null));
sb.append("\n");
}
sb.append("------ " + " end ------\n");
return sb.toString();
}
public static Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception{
Class<? extends Object> ownerClass = owner.getClass();
methodName = methodName.substring(0, 1).toUpperCase() + methodName.substring(1);
Method method = null;
try {
method = ownerClass.getMethod("get" + methodName);
} catch (SecurityException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
return " can't find 'get" + methodName + "' method";
}
return method.invoke(owner);
}
//从url地址中获取文件名
public static String getFileNameFromUrl(String fileUrl)
{
String fileName = "";
if(!ClassUtil.isNull(fileUrl)){
Integer index = fileUrl.lastIndexOf("/");
if(index>-1){
fileName = fileUrl.substring(index+1);
}
}
return fileName;
}
//若获取的变量为null 则返回空字符串
public static String dealStrWithNull(String str){
return (str == null? "":str);
}
//将文件url地址中的文件名进行编码后 以防文件名中存在加号等特殊符号 导致附件无法下载
public static String encodeFileNameForUrl(String fileUrl) throws UnsupportedEncodingException{
String fileName = "";
if(!ClassUtil.isNull(fileUrl)){
Integer index = fileUrl.lastIndexOf("/");
if(index>-1){
String urlPrefix = fileUrl.substring(0,index+1);
fileName = fileUrl.substring(index+1);
fileName = URLEncoder.encode(fileName,"UTF-8");
fileUrl = urlPrefix + fileName;
}
}
return fileUrl;
}
//对文件url中的文件名进行utf-8解码 以防文件名中存在加号等特殊符号 导致附件无法下载
public static String decodeFileNameForUrl(String fileUrl) throws UnsupportedEncodingException{
String fileName = "";
if(!ClassUtil.isNull(fileUrl)){
Integer index = fileUrl.lastIndexOf("/");
if(index>-1){
String urlPrefix = fileUrl.substring(0,index+1);
fileName = fileUrl.substring(index+1);
fileName = URLDecoder.decode(fileName,"UTF-8");
fileUrl = urlPrefix + fileName;
}
}
return fileUrl;
}
//去掉字符串中的制表符 换行符 空格 暂时未使用
public static String replaceBlank(String str) {
String dest = "";
if (str!=null) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
// 判断一个字符是否是中文
public static boolean isChineseChar(char c) {
return c >= 0x4E00 && c <= 0x9FA5;// 根据字节码判断
}
//针对数据库varchar类型 计算字符串长度:中文字符数*2 + 英文字符数<= 数据库字段设定长度
// 判断一个字符串是否含有中文
public static Integer getDBStrLength(String str) {
Integer len = 0;
if(str != null && str.length()>0){
char[] arr = str.toCharArray();
for(int i=0; i<arr.length; i++){
if(isChineseChar(arr[i])){
len += 2;
}else{
len += 1;
}
}//for
}
return len;
}
//根据字符串长度以及长度限制 对字符串进行截断处理
public static String getTruncateStrByMaxLength(String str,Integer maxLen) {
String result = "";
Integer len = 0;
if(str != null && str.length()>0){
char[] arr = str.toCharArray();
for(int i=0; i<arr.length; i++){
if(isChineseChar(arr[i])){
len += 2;
}else{
len += 1;
}
if(len <= maxLen){
result += arr[i];
}else{
break;
}
}//for
}
return result;
}
//针对字段内容中含有逗号的字符串 双引号内的逗号不分割 双引号外的逗号进行分割
public static String[] splitStrWithComma(String str){
String[] strArr = str.trim().split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)",-1); //双引号内的逗号不分割 双引号外的逗号进行分割
return strArr;
}
//读取props.properties
public static void main(String[] args) throws UnsupportedEncodingException{
/*ResourceBundle rb = ResourceBundle.getBundle("props.properties");
String temp = rb.getString("ATTACHMENT_SIZE");
System.out.println("temp: " + temp);*/
//trim() 可去掉字符串前后的换行符和空格
System.out.println(new String("just do it!\n").trim());
System.out.println("aaa");
String str = "aa \n bb \n cc ";
str = str.trim().replace("\n", "");
System.out.println("str: " + str + "; str length: " + str.split(";").length);
System.out.println("aaa");
}
}
1.3cookie操作
public class CookieUtil {
//20170807 add 根据获取cookie名 获取cookie值
public static String getCookieValueByName(HttpServletRequest request, String cookieName){
Cookie[] cookieArr= request.getCookies();
//logger.info("cookieArr length: " + cookieArr.length);
if(cookieArr == null){
return "";
}
String cookie_value = "";
for(int i=0; i<cookieArr.length; i++){
if(cookieArr[i].getName().equals(cookieName)){
cookie_value = cookieArr[i].getValue();
break;
}
}
return cookie_value;
}
}
###二. js
2.1 正则表达式
2.1.1 整数或者小数
//整数或者两位以内的小数
if(!((/^\d+(\.\d{1,2})?$/).test(inputValue) )){
alert("输入应为整数或者两位以内的小数");
return false;
}
//只能是非负整数或者只有一位小数
var reg = /^[0-9]\d*([.][0-9])?$/;
if(!reg.test(work_hour)){
g_validFlag = 0;
alert("只能是非负整数或小数点后一位的非负小数");
return;
}
2.1.2 是否为非负整数
//是否为非负整数
function isDigital(ele){
return(/^[0-9]+$/.test(ele));
}
//判断是否是非负数
function notNegativeNumber(value){
if(/^\d+(\.\d+)?$/.test(value)){
return true;
}
return false;
}
2.1.3 判断是否为数字以及浮点运算
//判断输入是否是整数
function isDigital(str){
if(/^\d+$/.test(str)){
return true;
}
return false;
}
//20160711 单纯的浮点数相乘会出现 0.29*100 = 0.289999996...的情况
function accMul(num1,num2){
var m=0,s1=num1.toString(),s2=num2.toString();
try{m+=s1.split(".")[1].length}catch(e){};
try{m+=s2.split(".")[1].length}catch(e){};
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}
2.1.4 校验密码强度
//20170822 add 检验密码强度 8位以下纯数字、纯字母密码为弱密码
function checkPasswordStrength(password){
var reg1 = new RegExp(/^[0-9]{1,7}$/);
var reg2 = new RegExp(/^[A-Za-z]{1,7}$/);
//alert(reg1.test(password));
//alert(reg2.test(password));
if(reg1.test(password) || reg2.test(password)){
return false;
}else{
return true;
}
}
2.2 数组排序
对象数组排序,如果name对应值相同,则按minor进行排序
var by = function(name,minor){
return function(o,p){
var a,b;
if(o && p && typeof o === 'object' && typeof p ==='object'){
a = o[name];
b = p[name];
if(a === b){
return typeof minor === 'function' ? minor(o,p):0;
}
if(typeof a === typeof b){
return a < b ? -1:1;
}
return typeof a < typeof b ? -1 : 1;
}else{
thro("error");
}
}
}
employees.sort(by('age',by('name')));
2.3 重载函数
if(!(Array.prototype.indexOf)) {
Array.prototype.indexOf = function (value) {
for (var i = 0; i < this.length; i++) {
if (this[i] == value) return i;
}
return -1;
};
}
if(!(String.prototype.trim)) {
String.prototype.trim = function () {
if (this != undefined) {
return this.replace(/(^\s*)|(\s*$)/g, '');
} else {
return "";
}
};
}
Date.prototype.format = function(format) {
var date = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"S+": this.getMilliseconds()
};
if (/(y+)/i.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in date) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1
? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
}
}
return format;
};
2.4 其他函数
//将所有按钮置为无效
function disableAllButtons(){
var btns = document.getElementsByTagName("button");
for(var i=0;i<btns.length;i++){
btns[i].disabled = true;
}
}
function enableAllButtons(){
var btns = document.getElementsByTagName("button");
for(var i=0;i<btns.length;i++){
btns[i].disabled = "";
}
}
/将容器(jquery对象)的滑动条滑至类名为className的第index个条目
function scrollToLocation(mainContainer,className,index) {
var scrollToContainer = mainContainer.find('.'+ className + ':eq(' + index + ')');
console.log(scrollToContainer);
//scrollToContainer = mainContainer.find('.son-panel:eq(5)');//滚动到<div id="thisMainPanel">中类名为son-panel的第六个处 :last 最后一个
//非动画效果
//mainContainer.scrollTop(
// scrollToContainer.offset().top - mainContainer.offset().top + mainContainer.scrollTop()
//);
var finalScrollTop = scrollToContainer.offset().top - mainContainer.offset().top-100 + mainContainer.scrollTop();
//alert("finalScrollTop: " + finalScrollTop);
//动画效果
mainContainer.animate({
scrollTop:finalScrollTop
}, 0);//1秒滑动到指定位置
}
var classUtil = {
//获取对象数组中属性key对应的所有value值
getAllValuesByKey:function(objArr,key){
var valueArr = [];
if(objArr == undefined || key == undefined){
return [];
}
$.each(objArr,function(index,obj){
valueArr.push(obj[key]);
});
return valueArr;
},
getObjByKeyValue:function(objArr,key,value){
var target = null;
$.each(objArr,function(index,obj){
if(obj[key] == value){
target = obj;
return false;
}
});
return target;
},
isEmpty:function(value){
return value == undefined || value == "";
},
dealStrValue:function(value){
if(value == undefined || value == "undefined"){
return "";
}else{
return value;
}
},
dealDateValue:function(value){
return value == undefined?"":new Date(value).format('yyyy-MM-dd hh:mm:ss');
},
/**
* 多个text/value值间用逗号隔开
* @param objArr 对象列表
* @param textStr 用逗号隔开的text字符串
* @param textProperty text对应的对象中属性
* @param valueProperty value对应的对象中属性
* */
getValuesByTextStr:function(objArr,textStr,textPropery,valueProperty){
var values = "";
if(textStr == undefined || textStr == ""){
return values;
}
var textArr = textStr.split(",");
$.each(textArr,function(index,text){
for(var i=0; i<objArr.length; i++){
if(objArr[i][textPropery] == text ){
if(values == ""){
values = objArr[i][valueProperty];
}else{
values += "," + objArr[i][valueProperty];
}
break;
}
}//for
});
return values;
}
};