- /**
- * 根据传入的格式获取日期
- *
- * @param format
- * 如:YYYYMMDD || MM/dd/yyyy, hh:mm:ss
- * @return 字符串的日期
- */
- public String getSysDate(String format) {
- String dateStr = "";
- try {
- Format formatter;
- Date date = new Date();
- formatter = new SimpleDateFormat(format);
- dateStr = formatter.format(date);
- } catch (Exception e) {
- System.out.println(e);
- }
- return dateStr;
- }
- /**
- * 根据传入的格式获取日期
- *
- * @param format
- * 如:YYYYMMDD || MM/dd/yyyy, hh:mm:ss
- * @return 字符串的日期
- */
- public String getFormatDate(Date date, String format) {
- String dateStr = "";
- try {
- Format formatter;
- formatter = new SimpleDateFormat(format);
- dateStr = formatter.format(date);
- } catch (Exception e) {
- System.out.println(e);
- }
- return dateStr;
- }
- /**
- * 获取分割后的字符串数组信息
- *
- * @param Str
- * @param Split
- * @return 字符串数组
- */
- public String[] getSplit(String Str, String Split) {
- return Str.split(Split);
- }
- /**
- * 把字符串转换成指定的日期格式
- *
- * @param str
- * @param format
- * @return
- */
- public Date Convert(String str, String format) {
- java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(format);
- try {
- java.util.Date d = sdf.parse(str);
- return d;
- } catch (Exception ex) {
- ex.printStackTrace();
- return null;
- }
- }
- /**
- * 获取月的天数
- *
- * @param year
- * @param month
- * @return
- */
- public static int getdays(String year, String month) {
- int yearInt = Integer.parseInt(year);
- int monthInt = Integer.parseInt(month);
- int monthdays = 31;
- switch (monthInt) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12: {
- monthdays = 31;
- break;
- }
- case 2: {
- if (isLeapyear(yearInt)) {
- monthdays = 29;
- } else {
- monthdays = 28;
- }
- break;
- }
- case 4:
- case 6:
- case 9:
- case 11: {
- monthdays = 30;
- break;
- }
- }
- return monthdays;
- }
- /**
- * 判断闰年
- *
- * @param year
- * @return
- */
- public static boolean isLeapyear(int year) {
- if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
- return true;
- } else {
- return false;
- }
- }
- /**
- * 判断某天是星期几
- *
- * @param strDate
- * @return 0 表示是星期天
- */
- public static int getWeekByDate(String strDate) {
- int dayOfWeek = 0;
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- Calendar calendar = Calendar.getInstance();
- Date date = new Date();
- date = sdf.parse(strDate);
- calendar.setTime(date);
- dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return dayOfWeek - 1;
- }
- /**
- * 判断字符串是不是数字
- *
- * @param str
- * @return
- */
- public static boolean isNumeric(String str) {
- Pattern pattern = Pattern.compile("[0-9]*");
- Matcher isNum = pattern.matcher(str);
- if (!isNum.matches()) {
- return false;
- }
- return true;
- }
- /**
- * 获得距给定日期countday的字符串格式
- *
- * @param date
- * @param countday
- * @param flag
- * 为true表示日期前,为false表示日期后
- * @return YYYY-MM-DD
- */
- public String getDateString(Date date, int countday, boolean flag) {
- String datestr = "";
- if (flag) {
- datestr = getFormatDate(new Date((new Date()).getTime() - countday
- * 24 * 60 * 60 * 1000l), "yyyy-MM-dd");
- } else {
- datestr = getFormatDate(new Date((new Date()).getTime() + countday
- * 24 * 60 * 60 * 1000l), "yyyy-MM-dd");
- }
- return datestr;
- }
- /***************************************************************************
- * 根据两个时间判断时间差
- * @throws ParseException
- * @throws ParseException
- **************************************************************************/
- public Long getDateDifference(Date date1,Date date2) throws ParseException {
- // Date date1 = new SimpleDateFormat("yyyy-mm-dd").parse("2008-3-31");
- // Date date2 = new SimpleDateFormat("yyyy-mm-dd").parse("2008-3-30");
- // 日期相减得到相差的日期
- long day = (date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000) > 0 ? (date1
- .getTime() - date2.getTime())
- / (24 * 60 * 60 * 1000)
- : (date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000);
- return day;
- }
- /***************************************************************************
- * 根据两个时间来判断时间的差值
- * @param days
- * @return
- */
- public Long getDateDifference1(Date date1,Date date2) throws ParseException {
- // 日期相减得到相差的日期
- long day = (date1.getTime() - date2.getTime())/ (24 * 60 * 60 * 1000);
- return day;
- }
- /***************************************************************************
- * 返回当前时间的一个时间差时间
- * @param days
- * @return
- */
- public static String Ds(int days) {
- SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd");
- Calendar calendar = Calendar.getInstance();
- int day = calendar.get(Calendar.DAY_OF_YEAR);
- calendar.set(Calendar.DAY_OF_YEAR, day - days);
- Date cc = calendar.getTime();
- return form.format(cc);
- }
- /*************************************************************************
- * 获取系统当前时间
- */
- public static Date getSystemDate(){
- SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
- Date date = new Date();
- try {
- return new SimpleDateFormat("yyyy-mm-dd").parse(sf.format(date));
- } catch (ParseException e) {
- }
- return null;
- }
- /**
- * 判断是否为整数
- *
- * @param str 传入的字符串
- * @return 是整数返回true,否则返回false
- */
- public static boolean isInteger(String str) {
- Pattern pattern = Pattern.compile("^[-//+]?[//d]*$");
- return pattern.matcher(str).matches();
- }
- /**
- * 判断是否为浮点数,包括double和float
- *
- * @param str 传入的字符串
- * @return 是浮点数返回true,否则返回false
- */
- public static boolean isDouble(String str) {
- Pattern pattern = Pattern.compile("^[-//+]?[.//d]*$");
- return pattern.matcher(str).matches();
- }
- /**
- * 判断输入的字符串是否符合Email样式.
- *
- * @param str 传入的字符串
- * @return 是Email样式返回true,否则返回false
- */
- public static boolean isEmail(String str) {
- Pattern pattern = Pattern.compile("^//w+([-+.]//w+)*@//w+([-.]//w+)*//.//w+([-.]//w+)*$");
- return pattern.matcher(str).matches();
- }
- /**
- * 判断输入的字符串是否为纯汉字
- *
- * @param str 传入的字符窜
- * @return 如果是纯汉字返回true,否则返回false
- */
- public static boolean isChinese(String str) {
- Pattern pattern = Pattern.compile("[/u0391-/uFFE5]+$");
- return pattern.matcher(str).matches();
- }
- /**
- * 是否为空白,包括null和""
- *
- * @param str
- * @return
- */
- public static boolean isBlank(String str) {
- return str == null || str.trim().length() == 0;
- }
- /**
- * 判断是否为质数
- *
- * @param x
- * @return
- */
- public static boolean isPrime(int x) {
- if (x <= 7) {
- if (x == 2 || x == 3 || x == 5 || x == 7)
- return true;
- }
- int c = 7;
- if (x % 2 == 0)
- return false;
- if (x % 3 == 0)
- return false;
- if (x % 5 == 0)
- return false;
- int end = (int) Math.sqrt(x);
- while (c <= end) {
- if (x % c == 0) {
- return false;
- }
- c += 4;
- if (x % c == 0) {
- return false;
- }
- c += 2;
- if (x % c == 0) {
- return false;
- }
- c += 4;
- if (x % c == 0) {
- return false;
- }
- c += 2;
- if (x % c == 0) {
- return false;
- }
- c += 4;
- if (x % c == 0) {
- return false;
- }
- c += 6;
- if (x % c == 0) {
- return false;
- }
- c += 2;
- if (x % c == 0) {
- return false;
- }
- c += 6;
- }
- return true;
- }
- /**
- * 人民币转成大写
- *
- * @param value
- * @return String
- */
- public static String hangeToBig(double value)
- {
- char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
- char[] vunit = { '万', '亿' }; // 段名表示
- char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
- long midVal = (long) (value * 100); // 转化成整形
- String valStr = String.valueOf(midVal); // 转化成字符串
- String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
- String rail = valStr.substring(valStr.length() - 2); // 取小数部分
- String prefix = ""; // 整数部分转化的结果
- String suffix = ""; // 小数部分转化的结果
- // 处理小数点后面的数
- if (rail.equals("00"))
- { // 如果小数部分为0
- suffix = "整";
- }
- else
- {
- suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
- }
- // 处理小数点前面的数
- char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
- char zero = '0'; // 标志'0'表示出现过0
- byte zeroSerNum = 0; // 连续出现0的次数
- for (int i = 0; i < chDig.length; i++)
- { // 循环处理每个数字
- int idx = (chDig.length - i - 1) % 4; // 取段内位置
- int vidx = (chDig.length - i - 1) / 4; // 取段位置
- if (chDig[i] == '0')
- { // 如果当前字符是0
- zeroSerNum++; // 连续0次数递增
- if (zero == '0')
- { // 标志
- zero = digit[0];
- }
- else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
- {
- prefix += vunit[vidx - 1];
- zero = '0';
- }
- continue;
- }
- zeroSerNum = 0; // 连续0次数清零
- if (zero != '0')
- { // 如果标志不为0,则加上,例如万,亿什么的
- prefix += zero;
- zero = '0';
- }
- prefix += digit[chDig[i] - '0']; // 转化该数字表示
- if (idx > 0)
- prefix += hunit[idx - 1];
- if (idx == 0 && vidx > 0)
- {
- prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
- }
- }
- if (prefix.length() > 0)
- prefix += '圆'; // 如果整数部分存在,则有圆的字样
- return prefix + suffix; // 返回正确表示
- }
- /**
- * 全角字符转半角字符
- *
- * @param QJStr
- * @return String
- */
- public static final String QJToBJChange(String QJStr)
- {
- char[] chr = QJStr.toCharArray();
- String str = "";
- for (int i = 0; i < chr.length; i++)
- {
- chr[i] = (char) ((int) chr[i] - 65248);
- str += chr[i];
- }
- return str;
- }
- /**
- * 去掉字符串中重复的子字符串
- *
- * @param str
- * @return String
- */
- private static String removeSameString(String str)
- {
- Set<String> mLinkedSet = new LinkedHashSet<String>();
- String[] strArray = str.split(" ");
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < strArray.length; i++)
- {
- if (!mLinkedSet.contains(strArray[i]))
- {
- mLinkedSet.add(strArray[i]);
- sb.append(strArray[i] + " ");
- }
- }
- System.out.println(mLinkedSet);
- return sb.toString().substring(0, sb.toString().length() - 1);
- }
- /**
- * 根据指定方法的参数去构造一个新的对象的拷贝并将他返回
- * @param obj 原始对象
- * @return 新对象
- * @throws NoSuchMethodException
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- * @throws InstantiationException
- * @throws SecurityException
- * @throws IllegalArgumentException
- */
- @SuppressWarnings("unchecked")
- public static Object copy(Object obj) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException,
- InvocationTargetException, NoSuchMethodException
- {
- //获得对象的类型
- Class classType = obj.getClass();
- //通过默认构造方法去创建一个新的对象,getConstructor的视其参数决定调用哪个构造方法
- Object objectCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
- //获得对象的所有属性
- Field[] fields = classType.getDeclaredFields();
- for(int i = 0; i < fields.length; i++)
- {
- //获取数组中对应的属性
- Field field = fields[i];
- String fieldName = field.getName();
- String stringLetter = fieldName.substring(0, 1).toUpperCase();
- //获得相应属性的getXXX和setXXX方法名称
- String getName = "get" + stringLetter + fieldName.substring(1);
- String setName = "set" + stringLetter + fieldName.substring(1);
- //获取相应的方法
- Method getMethod = classType.getMethod(getName, new Class[]{});
- Method setMethod = classType.getMethod(setName, new Class[]{field.getType()});
- //调用源对象的getXXX()方法
- Object value = getMethod.invoke(obj, new Object[]{});
- //调用拷贝对象的setXXX()方法
- setMethod.invoke(objectCopy, new Object[]{value});
- }
- return objectCopy;
- }
- //过滤特殊字符
- public static String encoding(String src){
- if (src==null)
- return "";
- StringBuilder result=new StringBuilder();
- if (src!=null){
- src=src.trim();
- for (int pos=0;pos<src.length();pos++){
- switch(src.charAt(pos)){
- case '/"':result.append(""");break;
- case '<':result.append("<");break;
- case '>':result.append(">");break;
- case '/'':result.append("'");break;
- case '&':result.append("&");break;
- case '%':result.append("&pc;");break;
- case '_':result.append("&ul;");break;
- case '#':result.append("&shap;");break;
- case '?':result.append("&ques;");break;
- default:result.append(src.charAt(pos));break;
- }
- }
- }
- return result.toString();
- }
- //反过滤特殊字符
- public static String decoding(String src){
- if (src==null)
- return "";
- String result=src;
- result=result.replace(""", "/"").replace("'", "/'");
- result=result.replace("<", "<").replace(">", ">");
- result=result.replace("&", "&");
- result=result.replace("&pc;", "%").replace("&ul", "_");
- result=result.replace("&shap;", "#").replace("&ques", "?");
- return result;
- }
- // toUtf8String将文件名转成GBK后再附到ContentDisposition
- public static String toUtf8String(String s) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- if (c >= 0 && c <= 255) {
- sb.append(c);
- } else {
- byte[] b;
- try {
- b = Character.toString(c).getBytes("utf-8");
- } catch (Exception ex) {
- System.out.println(ex);
- b = new byte[0];
- }
- for (int j = 0; j < b.length; j++) {
- int k = b[j];
- if (k < 0)
- k += 256;
- sb.append("%" + Integer.toHexString(k).toUpperCase());
- }
- }
- }
- return sb.toString();
- }
- /**
- * 对字节流进行GBK解码
- *
- * @param byteBuffer
- * @return
- */
- public static String decode(ByteBuffer byteBuffer) {
- Charset charset = Charset.forName("ISO-8859-1");
- CharsetDecoder decoder = charset.newDecoder();
- try {
- CharBuffer charBuffer = decoder.decode(byteBuffer);
- return new String(charBuffer.toString().getBytes("ISO8859_1"),
- "GBK").trim();
- } catch (Exception e) {
- return null;
- }
- }
- //实现百分比
- public String myPercent(int y, int z) {
- String baifenbi = "";// 接受百分比的值
- double baiy = y * 1.0;
- double baiz = z * 1.0;
- double fen = baiy / baiz;
- // NumberFormat nf = NumberFormat.getPercentInstance(); 注释掉的也是一种方法
- // nf.setMinimumFractionDigits( 2 ); 保留到小数点后几位
- DecimalFormat df1 = new DecimalFormat("##.00%"); // ##.00%
- // 百分比格式,后面不足2位的用0补齐
- // baifenbi=nf.format(fen);
- baifenbi = df1.format(fen);
- return baifenbi;
- }
- 正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。
- 匹配中文字符的正则表达式: [/u4e00-/u9fa5]
- 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
- 匹配双字节字符(包括汉字在内):[^/x00-/xff]
- 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
- 匹配空白行的正则表达式:/n/s*/r
- 评注:可以用来删除空白行
- 匹配HTML标记的正则表达式: <(/S*?)[^>]*>.*? <//1> ¦ <.*? />
- 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
- 匹配首尾空白字符的正则表达式:^/s* ¦/s*$
- 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
- 匹配Email地址的正则表达式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
- 评注:表单验证时很实用
- 匹配网址URL的正则表达式:[a-zA-z]+://[^/s]*
- 评注:网上流传的版本功能很有限,上面这个基本可以满足需求
- 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
- 评注:表单验证时很实用
- 匹配国内电话号码:/d{3}-/d{8} ¦/d{4}-/d{7}
- 评注:匹配形式如 0511-4405222 或 021-87888822
- 匹配腾讯QQ号:[1-9][0-9]{4,}
- 评注:腾讯QQ号从10000开始
- 匹配中国邮政编码:[1-9]/d{5}(?!/d)
- 评注:中国邮政编码为6位数字
- 匹配身份证:/d{15} ¦/d{18}
- 评注:中国的身份证为15位或18位
- 匹配ip地址:/d+/./d+/./d+/./d+
- 评注:提取ip地址时有用
- 匹配特定数字:
- ^[1-9]/d*$ //匹配正整数
- ^-[1-9]/d*$ //匹配负整数
- ^-?[1-9]/d*$ //匹配整数
- ^[1-9]/d* ¦0$ //匹配非负整数(正整数 + 0)
- ^-[1-9]/d* ¦0$ //匹配非正整数(负整数 + 0)
- ^[1-9]/d*/./d* ¦0/./d*[1-9]/d*$ //匹配正浮点数
- ^-([1-9]/d*/./d* ¦0/./d*[1-9]/d*)$ //匹配负浮点数
- ^-?([1-9]/d*/./d* ¦0/./d*[1-9]/d* ¦0?/.0+ ¦0)$ //匹配浮点数
- ^[1-9]/d*/./d* ¦0/./d*[1-9]/d* ¦0?/.0+ ¦0$ //匹配非负浮点数(正浮点数 + 0)
- ^(-([1-9]/d*/./d* ¦0/./d*[1-9]/d*)) ¦0?/.0+ ¦0$ //匹配非正浮点数(负浮点数 + 0)
- 评注:处理大量数据时有用,具体应用时注意修正
- 匹配特定字符串:
- ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
- ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
- ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
- ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
- ^/w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
- 评注:最基本也是最常用的一些表达式
- String.split()方法中,有时需要特殊字符,见下:
- /**
- * 点的转义:. ==> //u002E
- 美元符号的转义:$ ==> //u0024
- 乘方符号的转义:^ ==> //u005E
- 左大括号的转义:{ ==> //u007B
- 左方括号的转义:[ ==> //u005B
- 左圆括号的转义:( ==> //u0028
- 竖线的转义:| ==> //u007C
- 右圆括号的转义:) ==> //u0029
- 星号的转义:* ==> //u002A
- 加号的转义:+ ==> //u002B
- 问号的转义:? ==> //u003F
- 反斜杠的转义:/ ==> //u005C
- 竖线: | ==>//u007C
- * */