java实用工具类

import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import java.util.UUID;
import java.util.regex.Pattern;


import javax.servlet.http.HttpServletRequest;


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


import com.cityhouse.base.common.IConstants;
import com.shove.Convert;


/**
 * 公共
 * 
 * @author lzd
 */
public class Public {
private static Log log = LogFactory.getLog(Public.class);


/**
* 返回json给客户端

* @param args
* @throws IOException
*/
public static String returnValue(Object... args) throws IOException {
if (args.length % 2 != 0) {
returnValue("error", "-99999", "msg", "输入参数有误");
return "error";
}
JSONObject jsonObject = new JSONObject();
int i = 0;
while (true) {
if (args[i + 1] != null) {
jsonObject.put(args[i], args[i + 1]);
}
if (i + 2 == args.length)
break;
i = i + 2;
}
// JSONUtils.printObject(jsonObject);
return jsonObject.toString();
}


/**
* 将集合拼接成字符串 ,隔开
*/
public static String listSplltString(List<Map<String, Object>> list, String key) {
String key_value = "";
if (list == null)
return key_value;
String key_id = "";
for (Map<String, Object> map : list) {
key_id = Public.mapObjectToString(map, key);
if (key_id != "") {
if (key_value != "") {
key_value += ",";
}
key_value += key_id;
}
}
return key_value;
}


/**
* 将集合拼接成字符串 ,隔开
*/
public static String mapSplltString(Map<String, Object> map) {
String key_value = "";
String key_id = "";
for (String key : map.keySet()) {
key_id = mapObjectToString(map, key);
if (key_id != "") {
if (key_value != "") {
key_value += ",";
}
key_value += key_id;
}
}
return key_value;
}


/**
* 将map<string,object> 转成 string 类型
*/
public static String mapObjectToString(Map<String, Object> map, String key) {
// modified by kongxm@20150625 这边有一个bug,如果map是空的话,会挂掉
if (map == null) {
return "";
}


String value = "";
if (map.containsKey(key) && map.get(key) != null) {
value = map.get(key).toString();
}
return value;
}


/**
* 将map<string,object> 转成 list 类型
*/
public static List<Map<String, Object>> mapObjectToList(Map<String, Object> map, String key) {
List<Map<String, Object>> value = null;
if (map.containsKey(key) && map.get(key) != null) {
try {
value = (List<Map<String, Object>>) map.get(key);
} catch (Exception e) {
return null;
}
}
return value;
}


/**
* 将map<string,object> 转成 map<string,string> 类型
*/
public static Map<String, String> mapObjectToMap(Map<String, Object> map, String key) {
Map<String, String> value = null;
if (map.containsKey(key) && map.get(key) != null) {
value = (Map<String, String>) map.get(key);
}
return value;
}


/**
* Map<String, Object> 转 Map<String, String>

* @param map
* @return
*/
public static Map<String, String> mapObjectToMap(Map<String, Object> map) {
Map<String, String> value = new HashMap<String, String>();
for (String key : map.keySet()) {
value.put(key, mapObjectToString(map, key));
}
return value;
}


/*********************** 时间戳及时间字符串转换 ***************************/


/**
* 获取当前时间时间字符串,格式为yyyy-MM-dd HH:mm:ss
*/
public static String getCurrentDay() {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date data = new Date();
String date = df.format(data);
return date;
}


/**
* 获取当前时间时间字符串
*/
public static String getCurrentDay(String format) {
DateFormat df = new SimpleDateFormat(format);
Date data = new Date();
String date = df.format(data);
return date;
}


/**
* 获取当前时间时间戳
*/
public static long getCurrentDayLong() {
return System.currentTimeMillis();
}


/**
* 获取指定时间时间戳

* @throws ParseException
*/
public static long getCurrentDayLong(String time) throws ParseException {
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = df.parse(time);
return date.getTime();
} catch (Exception e) {
// log.error(e);
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(time);
return date.getTime();
} catch (Exception e2) {
return -1;
}
}
}


public static boolean isValidDate(String str) {
boolean convertSuccess = true;
// 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd");
try {
// 设置lenient为false.
// 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
format.setLenient(false);
format.parse(str);
} catch (ParseException e) {
// e.printStackTrace();
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
convertSuccess = false;
}
return convertSuccess;
}


/**
* 获取指定时间时间戳

* @throws ParseException
*/
public static Date getCurrentDayDate(String time) throws ParseException {
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = df.parse(time);
return date;
} catch (Exception e) {
// log.error(e);
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(time);
return date;
} catch (Exception e2) {
return new Date();
}
}
}


/**
* 将时间对象转换成时间字符串
*/
public static String getObjectDateToString(Object obj, String format) {
String value = "1991-01-01 00:00:00";
if (obj == null) {
return value;
}
return Convert.dateToStr(Convert.strToDate(obj.toString(), format, new Date()), value);
}


/**
* 获得当天0点时间

* @return
*/
public static long getTimesmorning() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}


/**
* 获得当天24点时间

* @return
*/
public static long getTimesnight() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 24);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}


/**
* 获得昨天0点时间

* @day 天数 负数减 正数加
* @return
*/
public static long getYesterdayTimesmorning(int day) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}


/**
* 获得昨天24点时间

* @day 天数 负数减 正数加
* @return
*/
public static long getYesterdayTimesnight(int day) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTimeInMillis();
}


/**
* 获得当前的明天0点时间

* @return
*/
public static long getTimesOneMorning() {
Calendar cal = Calendar.getInstance();
// cal.set(Calendar., value)
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}


/**
* 获得当前的明天24点时间

* @return
*/
public static long getTimesOneNight() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 24);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}


/**
* 获得相应周的星期一日期

* @return
*/
public static String getMondayYMD() {
int mondayPlus = getMondayPlus();
Calendar currentDate = Calendar.getInstance();
currentDate.add(Calendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(monday);
}


/**
* 获得相应周的星期天日期

* @return
*/
public static String getSundayYMD() {
int mondayPlus = getMondayPlus();
Calendar currentDate = Calendar.getInstance();
currentDate.add(Calendar.DATE, mondayPlus + 7 * 0 + 6);
Date monday = currentDate.getTime();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
return df.format(monday);
}


/**
* 获得今天是一周的第几天

* @return
*/
private static int getMondayPlus() {
Calendar cd = Calendar.getInstance();
// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == 1) {
return -6;
} else {
return 2 - dayOfWeek;
}
}


/**
* 获得相应周的星期几的日期

* @return
*/
public static String getWeekdaysYMD(int plus) {
int mondayPlus = getMondayPlus();
Calendar currentDate = Calendar.getInstance();
currentDate.add(Calendar.DATE, mondayPlus + 7 * 0 + plus);
Date monday = currentDate.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(monday);
}


/**
* 获得当月的天数

* @return
*/
public static long getMonthDays() {
Calendar cl = Calendar.getInstance();// 实例化一个日历对象
return cl.getActualMaximum(Calendar.DATE);// 得到一个月最大的一天就是一个月多少天
}


/**
* 获得指定日期的年月日

* @param dataStr
*            日期
* @param format
*            格式
* @return
* @throws ParseException
*/
public static String getYearMonthDay(String dataStr, String oldFormat, String format) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat(oldFormat);
Date data = sdf.parse(dataStr);
sdf = new SimpleDateFormat(format);
return sdf.format(data);
}


/**
* 在指定日期的基础上查询日期

* @return
*/
public static String getYMD(String str, int plus) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, plus);
Date monday = calendar.getTime();
return sdf.format(monday);
}


/**
* 获得指定日期的年月日

* @param dataStr
*            日期
* @param format
*            格式
* @return
* @throws ParseException
*/
public static String getYearMonthDay(String dataStr, String format) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date data = sdf.parse(dataStr);
sdf = new SimpleDateFormat(format);
return sdf.format(data);
}


/**
* 获得年月日

* @param type
*            0:获得年月日 1:获得年 2:获得月 3:获得日 4:获得年月
* @return
*/
public static String getYearMonthDay(int type) {
Calendar cal = Calendar.getInstance();
if (type == 0) {
// 查询年月日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(cal.getTime());
} else if (type == 1) {
// 年
return cal.get(Calendar.YEAR) + "";
} else if (type == 2) {
// 月
return (cal.get(Calendar.MONTH) + 1) + "";
} else if (type == 3) {
// 日
return cal.get(Calendar.DAY_OF_MONTH) + "";
} else if (type == 4) {
// 年月
if ((cal.get(Calendar.MONTH) + 1) < 10) {
return cal.get(Calendar.YEAR) + "0" + (cal.get(Calendar.MONTH) + 1) + "";
} else {
return cal.get(Calendar.YEAR) + "" + (cal.get(Calendar.MONTH) + 1) + "";
}


}
return "";
}


/**
* 获得本年的第一天
* @return
*/
public static long getYearFirstDay(){
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
         return calendar.getTimeInMillis();
}

/**
* 获得本年的最后一天
* @return
*/
public static long getYearLastDay(){
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.roll(Calendar.DAY_OF_YEAR, -1);
         return calendar.getTimeInMillis();
}

/**
* 获得本季度的第一天
* @return
*/
public static long getQuarterFirstDay(){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date()); 
int month = getQuarterInMonth(cal.get(Calendar.MONTH), true);  
cal.set(Calendar.MONTH, month);  
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTimeInMillis();
}

/**
* 根据月份返回当前季度起始所在月
* @param month 月份
* @param isQuarterStart 是否季度开始
* @return
*/
private static int getQuarterInMonth(int month, boolean isQuarterStart) {
int months[] = { 1, 4, 7, 10 };  
if (!isQuarterStart){  
months = new int[] { 3, 6, 9, 12 };  
}
if (month >= 2 && month <= 4){
return months[0];
}else if(month >= 5 && month <= 7){
return months[1];
}else if(month >= 8 && month <= 10){
return months[2];
}else{
return months[3];
}
}

/**
* 获得本季度的最后一天
* @return
*/
public static long getQuarterLastDay(){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date()); 
int month = getQuarterInMonth(cal.get(Calendar.MONTH), false);  
cal.set(Calendar.MONTH, month + 1);  
cal.set(Calendar.DAY_OF_MONTH, 0);
return cal.getTimeInMillis();
}

/**
* 获得本月的第一天
* @return
*/
public static long getMonthFirstDay(){
Calendar cale = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
//return format.format(cale.getTime());
return cale.getTimeInMillis();
}


/**
* 获得本月的最后一天
* @return
*/
public static long getMonthLastDay(){
Calendar cale = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 1);
cale.set(Calendar.DAY_OF_MONTH, 0);
//return format.format(cale.getTime());
return cale.getTimeInMillis();
}


/***************************************** 金额转换 ******************************/
/***
* 保留小数点两位
*/
public static String ConverToDecimalToStringTwo(Object object) {
String _value = "0.00";
if (object == null) {
return _value;
}
String value = object.toString();
if (StringUtils.isBlank(value)) {
return _value;
}
try {
BigDecimal bigDecimal = new BigDecimal(value);
return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
} catch (Exception e) {
// log.error(e);
return "0.00";
}
}


public static float ConverToDecimalToTwo(Object object) {
float _value = 0.00F;
if (object == null) {
return _value;
}
String value = object.toString();
if (StringUtils.isBlank(value)) {
return _value;
}
try {
BigDecimal bigDecimal = new BigDecimal(value);
return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
} catch (Exception e) {
// log.error(e);
return 0.00F;
}
}


/***
* 保留小数点一位
*/
public static String ConverToDecimalToStringOne(Object object) {
String _value = "0.0";
if (object == null) {
return _value;
}
String value = object.toString();
if (StringUtils.isBlank(value)) {
return _value;
}
try {
BigDecimal bigDecimal = new BigDecimal(value);
return bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).toString();
} catch (Exception e) {
// log.error(e);
return "0.0";
}
}


/**
* 保留2位小数

* @param obj
* @return
*/
public static String ConverToTwoFloat(Object obj) {
String str = obj + "";
double num = 0;
try {
num = Double.parseDouble(str);
} catch (NumberFormatException e) {
num = 0;
log.info("错误提示");
e.printStackTrace();
}
str = String.format("%.2f", num);
return str;
}


/**
* 保留2位小数,不会四舍五入,(例如 65.995 输出 65.99)

* @param obj
* @return
*/
public static double ConverToTwoFloatShe(Object obj) {
String str = obj + "";
double num = 0;
try {
num = Double.parseDouble(str);
} catch (NumberFormatException e) {
num = 0;
log.info("错误提示");
e.printStackTrace();
}
DecimalFormat formater = new DecimalFormat();
formater.setMaximumFractionDigits(2);
formater.setGroupingSize(0);
formater.setRoundingMode(RoundingMode.FLOOR);
return Public.mapTo(formater.format(num), 0.0);
}


/**
* 自定义保留count位小数

* @param obj
* @return
*/
public static String ConverToDIYFloat(Object obj, int count) {
String str = obj + "";
double num = 0;
try {
num = Double.parseDouble(str);
} catch (NumberFormatException e) {
num = 0;
log.info("错误提示");
e.printStackTrace();
}
if (count == 1) {
str = String.format("%.1f", num);
} else if (count == 2) {
str = String.format("%.2f", num);
} else if (count == 3) {
str = String.format("%.3f", num);
} else if (count >= 4) {
str = String.format("%.4f", num);
}
return str;
}


/**
* 保留一位小数

* @param object
* @return
*/
public static float ConverToDecimalToOne(Object object) {
float _value = 0.00F;
if (object == null) {
return _value;
}
String value = object.toString();
if (StringUtils.isBlank(value)) {
return _value;
}
try {
BigDecimal bigDecimal = new BigDecimal(value);
return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
} catch (Exception e) {
// log.error(e);
return 0.00F;
}
}


/**
* 金额乘法,保留两位小数

* @param d1
* @param d2
* @return
*/
public static double mul(double d1, double d2) { // 进行乘法运算
BigDecimal b1 = new BigDecimal(d1+"");
BigDecimal b2 = new BigDecimal(d2+"");
double aa= b1.multiply(b2).doubleValue();
BigDecimal b = new BigDecimal(aa);
double f1 = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return f1;
}

public static double mul(BigDecimal b1, BigDecimal b2) { // 进行乘法运算
double aa= b1.multiply(b2).doubleValue();
BigDecimal b = new BigDecimal(aa);
double f1 = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return f1;
}


public static double mul2(double d1, double d2,int len) { // 进行乘法运算
BigDecimal b1 = new BigDecimal(d1+"");
BigDecimal b2 = new BigDecimal(d2+"");
double aa= b1.multiply(b2).doubleValue();
BigDecimal b = new BigDecimal(aa);
double f1 = (double) b.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
return f1;
}

/**
* 金额除法

* @param d1
* @param d2
* @param len
*            保留几位小数
* @return
*/
public static double div(double d1, double d2, int len) {// 进行除法运算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return (double) b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 金额除法

* @param d1
* @param d2
* @param len
*            保留几位小数
* @return
*/
public static double div(BigDecimal d1, BigDecimal d2, int len) {// 进行除法运算
return (double) d1.divide(d2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确加法计算的add方法,保留2为小数

* @param value1 被加数
* @param value2 加数
* @return 两个参数的和
*/
public static double add(double value1, double value2) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return (double) b1.add(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); // 四舍五入.doubleValue();
}


/**
* 提供精确减法运算的sub方法,保留2为小数

* @param value1 被减数
* @param value2 减数
* @return 两个参数的差
*/
public static double sub(double value1, double value2) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
double f = b1.subtract(b2).doubleValue();
BigDecimal b = new BigDecimal(f);
double f1 = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return f1;


}


/**
* 判断valueMap里面的当前key是否可以合法插入

* @param valueMap
*            存储数据的map
* @param key
* @param type
*            1String, 2Long ,3 Integer,4 Double 5 Boolean
* @throws Exception
*/
public static Boolean verifyValue(Map<String, Object> valueMap, String key, Integer type, Integer minValue) throws Exception {
if (valueMap.containsKey(key) && valueMap.get(key) != null) {// 是否包含key
if (type == 1) {
return true;
} else if (type == 2) {// Long
Long value = Convert.strToLong(Public.mapObjectToString(valueMap, key), -1);
if (value > minValue) {
return true;
}
} else if (type == 3) {// Integer
Integer value = Convert.strToInt(Public.mapObjectToString(valueMap, key), -1);
if (value > minValue) {
return true;
}
} else if (type == 4) {// Double
Double value = Convert.strToDouble(Public.mapObjectToString(valueMap, key), -1);
if (value > minValue) {
return true;
}
}
}
return false;
}


/**
* jsonString to ArrayList

* @param rsContent
* @return
* @throws Exception
*/
public static List<Map<String, Object>> jsonStringToList(String rsContent) throws Exception {
JSONArray arry = JSONArray.fromObject(rsContent);


// System.out.println("json字符串内容如下");
// System.out.println(arry);
List<Map<String, Object>> rsList = new ArrayList<Map<String, Object>>();
for (int i = 0; i < arry.size(); i++) {
JSONObject jsonObject = arry.getJSONObject(i);
Map<String, Object> map = new HashMap<String, Object>();
for (Iterator<?> iter = jsonObject.keys(); iter.hasNext();) {
String key = (String) iter.next();
String value = jsonObject.get(key).toString();
map.put(key, value);
}
rsList.add(map);
}
return rsList;
}


/**
* jsonString 转 HashMap

* @param rsContent
* @return
*/
public static Map<String, Object> jsonStringToMap(String rsContent) {
JSONObject jsonObject = JSONObject.fromObject(rsContent);
Map<String, Object> map = new HashMap<String, Object>();
for (Iterator<?> iter = jsonObject.keys(); iter.hasNext();) {
String key = (String) iter.next();
String value = jsonObject.get(key).toString();
map.put(key, value);
}


return map;
}


/**
* 过滤HTML标签

* @param inputString
* @return
*/
public static String Html2TextHtml2Text(String inputString) {
String htmlStr = inputString; // 含html标签的字符串
String textStr = "";
java.util.regex.Pattern p_script;
java.util.regex.Matcher m_script;
java.util.regex.Pattern p_style;
java.util.regex.Matcher m_style;
java.util.regex.Pattern p_html;
java.util.regex.Matcher m_html;
java.util.regex.Pattern p_html1;
java.util.regex.Matcher m_html1;


try {
String regEx_script = "<[//s]*?script[^>]*?>[//s//S]*?<[//s]*?///[//s]*?script[//s]*?>"; // 定义script的正则表达式{或<script[^>]*?>[//s//S]*?<///script>
String regEx_style = "<[//s]*?style[^>]*?>[//s//S]*?<[//s]*?///[//s]*?style[//s]*?>"; // 定义style的正则表达式{或<style[^>]*?>[//s//S]*?<///style>
String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
String regEx_html1 = "<[^>]+";
p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(htmlStr);
htmlStr = m_script.replaceAll(""); // 过滤script标签


p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
m_style = p_style.matcher(htmlStr);
htmlStr = m_style.replaceAll(""); // 过滤style标签


p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
m_html = p_html.matcher(htmlStr);
htmlStr = m_html.replaceAll(""); // 过滤html标签


p_html1 = Pattern.compile(regEx_html1, Pattern.CASE_INSENSITIVE);
m_html1 = p_html1.matcher(htmlStr);
htmlStr = m_html1.replaceAll(""); // 过滤html标签


textStr = htmlStr;


} catch (Exception e) {
System.err.println("Html2Text: " + e.getMessage());
}


return textStr;// 返回文本字符串
}


/**
* 通过request获取请求参赛,返回map

* @param request
* @return
* @throws Exception
*/
public static Map<String, Object> requestToMap(HttpServletRequest request) throws Exception {
Map<String, Object> params = new HashMap<String, Object>();
Map requestParams = request.getParameterMap(); // 支付宝返回的支付结果
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
// 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
// e0994e42e7c1c30d94d0420f4134cb3d
// K1ib4bQbOykKV3vTWE19azOAJnVw6bZt4v%252BwNO%252BpgHaN9w%253D%253D
// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "UTF-8");
params.put(name, valueStr);
}
return params;


}


/************************************************ 类型转换 map to ******************************/


/**
* Object 转 String

* @param value
* @param defaultValue
* @return
*/
public static String mapTo(Object value, String defaultValue) {
if (value == null) {
return defaultValue;
}
if (StringUtils.isBlank(value.toString())) {
return defaultValue;
}
return Convert.strToStr(value.toString(), defaultValue);
}


/**
* Object 转 int

* @param value
* @param defaultValue
* @return
*/
public static int mapTo(Object value, int defaultValue) {


if (value == null) {
return defaultValue;
}
return Convert.strToInt(value.toString(), defaultValue);
}


/**
* Object 转 long

* @param value
* @param defaultValue
* @return
*/
public static long mapTo(Object value, long defaultValue) {


if (value == null) {
return defaultValue;
}
if (value instanceof Float || value instanceof Double) {
throw new RuntimeException("类型转换错误,Object转Long");
}
return Convert.strToLong(value.toString(), defaultValue);
}


/**
* Object 转float

* @param value
* @param defaultValue
* @return
*/
public static float mapTo(Object value, float defaultValue) {


if (value == null) {
return defaultValue;
}


// float num=0.00f;
// BigDecimal bigDecimal = new BigDecimal(value.toString());
// num =(float) bigDecimal.doubleValue();


try {
// return num;
// return Convert.strToFloat(value+"f", defaultValue);
// return strToFloat(value.toString(), defaultValue);
String va = value.toString().trim();
int i = va.indexOf(".");
String integer = "0";
String decimal = "0";
if (i >= 0) { // 防止int型数据时报错的问题 by张磊
integer = va.substring(0, i);
decimal = va.substring(i + 1);
} else {
integer = va;
}
if (Float.parseFloat(decimal) < 0) {
decimal = "0";
}


return Float.parseFloat(integer + "." + decimal);
} catch (Exception e) {
return defaultValue;
}
}


/**
* Object 转 double

* @param value
* @param defaultValue
* @return
*/
public static double mapTo(Object value, double defaultValue) {


if (value == null) {
return defaultValue;
}


// float num=0.00f;
// BigDecimal bigDecimal = new BigDecimal(value.toString());
// num =(float) bigDecimal.doubleValue();


try {
// return num;
// return Convert.strToFloat(value+"f", defaultValue);
// return strToFloat(value.toString(), defaultValue);
String va = value.toString();
int i = va.indexOf(".");
String integer = "0";
String decimal = "0";
if (i >= 0) { // 防止int型数据时报错的问题 by张磊
integer = va.substring(0, i);
decimal = va.substring(i + 1);
} else {
integer = va;
}
if (Double.parseDouble(decimal) < 0) {
decimal = "0";
}


return Double.parseDouble(integer + "." + decimal);
} catch (Exception e) {
return defaultValue;
}
}


public static BigDecimal mapTo(Object value, BigDecimal defaultValue) {
try {


BigDecimal bigDecimal = null;
if (value instanceof BigDecimal) {
bigDecimal = (BigDecimal) value;
} else if (value instanceof String) {
bigDecimal = new BigDecimal((String) value);
} else if (value instanceof BigInteger) {
bigDecimal = new BigDecimal((BigInteger) value);
} else if (value instanceof Number) {
bigDecimal = new BigDecimal(((Number) value).doubleValue());
} else {
return defaultValue;
}
return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
} catch (Exception e) {
return defaultValue;
}
}




/**

* @param type为1生成长度20的字符串
*            ,为2生成长度为8的字符串
* @return
*/
public static String generateStr(int type) {
List<String> charList = new ArrayList<String>();
for (char i = 'a'; i <= 'z'; i++) {
charList.add(String.valueOf(i));
}
for (char i = 'A'; i <= 'Z'; i++) {
charList.add(String.valueOf(i));
}
for (int i = 0; i <= 9; i++) {
charList.add(String.valueOf(i));
}
StringBuffer sb = new StringBuffer();
switch (type) {
case 1:
sb.append("QCB");
int indexCardNo = (int) (Math.random() * charList.size());
sb.append(charList.get(indexCardNo));
String str = "";
for (int i = 0; i < 4; i++) {
int index = (int) (Math.random() * charList.size());
str += charList.get(indexCardNo);
}
sb.append(MD5SecurityUtil.MD5(UUID.randomUUID().toString().replace("-", ""), 16));
break;


case 2:
for (int i = 0; i < 8; i++) {
int indexCode = (int) (Math.random() * charList.size());
sb.append(charList.get(indexCode));
}
break;
}
return sb.toString();
}


/**
* 计算地球上任意两点(经纬度)距离

* @param long1
*            第一点经度
* @param lat1
*            第一点纬度
* @param long2
*            第二点经度
* @param lat2
*            第二点纬度
* @return 返回距离 单位:米
*/
public static double Distance(double long1, double lat1, double long2, double lat2) {
double a, b, R;
R = 6378137; // 地球半径
lat1 = lat1 * Math.PI / 180.0;
lat2 = lat2 * Math.PI / 180.0;
a = lat1 - lat2;
b = (long1 - long2) * Math.PI / 180.0;
double d;
double sa2, sb2;
sa2 = Math.sin(a / 2.0);
sb2 = Math.sin(b / 2.0);
d = 2 * R * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2));
return d;
}


/**
* 字符串转Double

* @param num
* @param default_num
* @return
*/
public static Double strToDouble(Object obj, double default_num) {
if (obj == null) {
return default_num;
}
String num = obj.toString();
double return_num = default_num;
try {
if (StringUtils.isBlank(num)) {
return_num = default_num;
} else if (num.matches("^[-\\+]?[\\d]*$")) {// 如果是整数也可以
return_num = Double.parseDouble(num);
} else if (num.matches("^(-?\\d+)(\\.\\d+)?$")) {
return_num = Double.parseDouble(num);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
return return_num;
}


/**
* 字符串转Float

* @param num
* @param default_num
* @return
*/
public static Float strToFloat(String obj, float default_num) {
if (obj == null) {
return default_num;
}
// ("2++111+"+obj);
String num = obj;
float return_num = default_num;
// System.out.println("3+++"+num);
try {
if (StringUtils.isBlank(num)) {
return_num = default_num;
} else if (num.matches("^[-\\+]?[\\d]*$")) {// 如果是整数也可以
return_num = Float.parseFloat(num);
} else if (num.matches("^(-?\\d+)(\\.\\d+)?$")) {


return_num = Float.valueOf(num);
}
// System.out.println("7+++"+num);
// System.out.println("4++111+"+return_num);
} catch (NumberFormatException e) {
e.printStackTrace();
}
// System.out.println("5++111+"+return_num);
return return_num;
}


/**
* 密码加密

* @param password
* @return
* @throws Exception
*/
public static String password(String password) throws Exception {
password = com.shove.security.Encrypt.encryptSES(password, IConstants.MD5_KEY);
return password;
}
 
/**
* 密码解码

* @param password
* @return
* @throws Exception
*/
public static String passwordApp(String password) throws Exception {


password = Des3.decode(password);// 解密


password = com.shove.security.Encrypt.encryptSES(password, IConstants.MD5_KEY);
return password;
}


/**
* 保留一位小数

* @param f
* @return
*/
public static float getOneScaleFloatPrice(float f) {
BigDecimal bidBigDecimal = new BigDecimal(f);
float r = bidBigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue();
return r;
}


/**
* 保留两位小数

* @param f
* @return
*/
public static float getSecondScaleFloatPrice(float f) {
BigDecimal bidBigDecimal = new BigDecimal(f);
float r = bidBigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
return r;
}


/**
* 保留四为小数

* @param f
* @return
*/
public static float getFourScaleFloatPrice(float f) {
BigDecimal bidBigDecimal = new BigDecimal(f);
float r = bidBigDecimal.setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
return r;
}


/**
* 根据两点的经纬度 计算两点之间的距离

* @param lat1
*            第一个位置的纬度
* @param lng1
*            第一个位置的经度
* @param lat2
*            第二个位置的纬度
* @param lng2
*            第为个位置的经度
* @return
*/
public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
double EARTH_RADIUS = 6378.137;
double radLat1 = lat1 * Math.PI / 180.000;
double radLat2 = lat2 * Math.PI / 180.000;
double a = radLat1 - radLat2;
double b = lng1 * Math.PI / 180 - lng2 * Math.PI / 180.000;
double s = 2.000 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2.000), 2.000) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2.000), 2.000)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000.000) / 10000.000;
return s;
}


/**

* @param n
* @return
*/
public static String toNumberSystem26(long n) {
String s = "";
while (n > 0) {
long m = n % 26;
if (m == 0)
m = 26;
s = (char) (m + 64) + s;
n = (n - m) / 26;
}
return s;
}


/**
* 字符串unescape解码(特别说明:此方法只适用于javascript自带的escape方法[在文本编辑器取值时用],JAVA后台用此方法解码)

* @param src
* @return
*/
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}


/**
* 字符串unescape解码(特别说明:此方法只适用于javascript自带的escape方法[在文本编辑器取值时用],JAVA后台用此方法解码)

* @param src
* @return
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// String mm= MD5SecurityUtil.MD5("1295.00" + "1" + "0.00", 64);
// System.out.println(mm);
// //String md5 = MD5SecurityUtil.MD5(bonus + stock + balance, 64);
//
///* BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
// BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
// double f = b1.subtract(b2).doubleValue();
// BigDecimal b = new BigDecimal(f);
// double f1 = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();*/
//
// BigDecimal b1 = new BigDecimal(Double.valueOf(200));
// BigDecimal b2 = new BigDecimal(Double.valueOf(0.018));
// double aa= (double) b1.multiply(b2).doubleValue();
// BigDecimal b = new BigDecimal(aa);
// double f1 = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// System.out.println(f1);
//
//
//
//
// Calendar cal = Calendar.getInstance();
// cal.add(Calendar.DAY_OF_MONTH, -1);
// cal.set(Calendar.HOUR_OF_DAY, 0);
// cal.set(Calendar.SECOND, 0);
// cal.set(Calendar.MINUTE, 0);
// cal.set(Calendar.MILLISECOND, 0);
// long bb = cal.getTimeInMillis();
// System.out.println(bb);
// cal = Calendar.getInstance();
// cal.add(Calendar.DAY_OF_MONTH, -1);
// cal.set(Calendar.HOUR_OF_DAY, 23);
// cal.set(Calendar.SECOND, 59);
// cal.set(Calendar.MINUTE, 59);
// cal.set(Calendar.MILLISECOND, 999);
// long cc = cal.getTimeInMillis();
// System.out.println(cc);

// String str = Public.mapTo("769.05",0D) + "";
// System.out.println("str===="+str);
// System.out.println(Public.createMerchantSgin("0.0", "0", str,"0.0"));


// System.out.println(createUserCode("H0503100"));

//String password1 = Public.password("123456");
String month=getYearMonthDay(2);
System.out.println(month);

double mm =Public.mul2(5.22D, 3D, 4);

System.out.println(mm);

double finalMoney = 28.06 * (1 - 0.0028);
System.out.println("finalMoney:"+finalMoney);
        DecimalFormat formater = new DecimalFormat();
        formater.setMaximumFractionDigits(2);
        formater.setGroupingSize(0);
        formater.setRoundingMode(RoundingMode.FLOOR);
        System.out.println(formater.format(finalMoney));

}


/**
* 验证是否有SQL注入字符

* @param src
* @return
*/
public static String ValidateQuery(String str) {
String tt = str.toLowerCase();
String reg = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|" + "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)";
Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);
if (sqlPattern.matcher(tt).find()) {
throw new RuntimeException("存在sql注入");
}
return str;
}


/**
* 验证数据库中的用户签名与当前分红、当前股权、当前余额经过加密后所得的串是否一致

* @param usersgin
*            用户原签名
* @param bonus
*            当前分红
* @param stock
*            当前股权
* @param balance
*            当前余额
* @return
*/
public static boolean checkUserSgin(String usersgin, String bonus, String stock, String balance) {
String md5 = MD5SecurityUtil.MD5(bonus + stock + balance, 64);
return md5.equals(usersgin);
}


/**
* 创建用户签名 根据当前分红、当前股权、当前余额经过加密后所得的串

* @param bonus
*            当前分红
* @param stock
*            当前股权
* @param balance
*            当前余额
* @return
*/
public static String createUserSgin(String bonus, String stock, String balance) {
return MD5SecurityUtil.MD5(bonus + stock + balance, 64);
}


/**
* 验证数据库中的商家签名与当前分红、当前股权、当前余额、总收入经过加密后所得的串是否一致

* @param usersgin
*            用户原签名
* @param bonus
*            当前分红
* @param stock
*            当前股权
* @param balance
*            当前余额
* @param total_incoming
*            总收入
* @return
*/
public static boolean checkMerchantSgin(String usersgin, String bonus, String stock, String balance, String total_incoming) {
String md5 = MD5SecurityUtil.MD5(bonus + stock + balance + total_incoming, 64);
return md5.equals(usersgin);
}


/**
* 创建商家签名 根据当前分红、当前股权、当前余额、总收入经过加密后所得的串

* @param bonus
*            当前分红
* @param stock
*            当前股权
* @param balance
*            当前余额
* @param total_incoming
*            总收入
* @return
*/
public static String createMerchantSgin(String bonus, String stock, String balance, String total_incoming) {
return MD5SecurityUtil.MD5(bonus + stock + balance + total_incoming, 64);
}


/**
* 校验银行卡卡号 校验过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
* 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,将个位十位数字相加,即将其减去9),再求和。
* 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。

* @param bankCard
*            银行卡号
* @return 银行卡有效返回true 否则返回 false
*/
public static boolean checkBankCard(String bankCard) {
if (bankCard.length() < 15 || bankCard.length() > 19) {
return false;
}
char bit = getBankCardCheckCode(bankCard.substring(0, bankCard.length() - 1));
if (bit == 'N') {
return false;
}
return bankCard.charAt(bankCard.length() - 1) == bit;
}


/**
* 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位

* @param nonCheckCodeBankCard
* @return
*/
public static char getBankCardCheckCode(String nonCheckCodeBankCard) {
if (nonCheckCodeBankCard == null || nonCheckCodeBankCard.trim().length() == 0 || !nonCheckCodeBankCard.matches("\\d+")) {
// 如果传的不是数据返回N
return 'N';
}
char[] chs = nonCheckCodeBankCard.trim().toCharArray();
int luhmSum = 0;
for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
int k = chs[i] - '0';
if (j % 2 == 0) {
k *= 2;
k = k / 10 + k % 10;
}
luhmSum += k;
}
return (luhmSum % 10 == 0) ? '0' : (char) ((10 - luhmSum % 10) + '0');
}

/**
* map 排序
* @param map
* @return
*/
public static Map<String, Object> sortMapByKey(Map<String, Object> map) {
if (map == null || map.isEmpty()) {
return null;
}
 
Map<String, Object> sortMap = new TreeMap<String, Object>(
new MapKeyComparator());


sortMap.putAll(map);


return sortMap;
}
public static class MapKeyComparator implements Comparator<String>{


@Override
public int compare(String str1, String str2) {
  return str1.compareTo(str2);
}
}
 
/**
  * 生成会员usercode方法
  * @param maxUserCode 当前数据库中根据usercode排序后第一个会员的usercode
  * @return
  */
public static String createUserCode(String maxUserCode){
String result = "";
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH)+1;
 
String dayString = day+"";
String monthString = month +"";
 
String dayStr = day < 10 ? "0"+dayString : dayString;
String monthStr = month < 10 ? "0"+monthString : monthString;
 
if(StringUtils.isNoneBlank(maxUserCode) && maxUserCode.length() >= 9){
String subStr = maxUserCode.substring(5, maxUserCode.length());
int nowNum = 0;
try{
nowNum = Integer.parseInt(subStr) + 1;
}catch (Exception e) {
return "H01011001";
}
result = "H"+monthStr+dayStr+nowNum;
}else{
return "H"+monthStr+dayStr+"1001";
}

 
return result;
}

/**
  * 获取订单orderCode
  * @param orderId 主键id
  * @return
  */
public static String getOrderCode(long orderId,String day){
String number="";
if(StringUtils.isBlank(day)){
Date date = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmm");
day = sdf1.format(date);
}
number=day+String.format("%011d",orderId);
return number;
}

/**
* 生成支付单的编号
* @param payNumber 抬头,不填默认OA_
* @param payId 主键id
* @return
*/
public static String getOrderPayCode(String payNumber,long payId,String curDate){
if(StringUtils.isBlank(payNumber)){
payNumber="";
}
if(StringUtils.isBlank(curDate)){
Date pay_date = new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmm");
curDate = sdf2.format(pay_date);
}

payNumber+=curDate+String.format("%011d",payId);
return payNumber;
}

/**
* 生成支付宝退单标识号(8位日期+退单号+TD+时间戳)
* @param payNumber 抬头,不填默认OA_
* @param payId 主键id
* @return
*/
public static String getRefundBatchCode(String curDate,long refundId){

if (StringUtils.isBlank(curDate)) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
curDate = sdf1.format(new Date());
}
curDate += refundId +"TD"+ System.currentTimeMillis();
return curDate;
}

/**
* 生成购物车的唯一标识
* @return
*/
public static String getShoppingCartOnlyCode(long shoppingId){
String code ="";
String dayString = getCurrentDay("yyyyMMddHHmmss");
code+=dayString+String.format("%011d",shoppingId);
return code;
}

/**
  * 生成设计师VR方案商品编号方法
  * @param maxUserCode 当前数据库中根据usercode排序后第一个会员的usercode
  * @return
  */
public static String createGoodsCode(String maxUserCode){
String result = "";
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH)+1;
 
String dayString = day+"";
String monthString = month +"";
 
String dayStr = day < 10 ? "0"+dayString : dayString;
String monthStr = month < 10 ? "0"+monthString : monthString;
 
Random random = new Random();  
int randStr = random.nextInt(9000) + 1000;  
 
if(StringUtils.isNoneBlank(maxUserCode) && maxUserCode.length() >= 9){
String subStr = maxUserCode.substring(5, maxUserCode.length());
int nowNum = 0;
try{
nowNum = Integer.parseInt(subStr) + 1 + randStr;
}catch (Exception e) {
return "G01011001";
}
result = "G"+monthStr+dayStr+nowNum;
}else{
return "G"+monthStr+dayStr+"1001";
}

 
return result;
}
}

猜你喜欢

转载自blog.csdn.net/qq_31207917/article/details/80344568