时间操作,目前此表达式支持2018-08-20 09:09:09样式,具体可参看代码
public static void main(String args []) {
String str = "2017_03_2009:09:09";
/**
* 匹配任何非空白字符:\S 或 [^\s],^用于"[]"外表示从开头匹配,用于"[]"内表示"非",即不包括
*
* 匹配任何空白字符:\s 或 [^\S],等价于[ \f\n\r\t\v],这里小写s是匹配所有非空白,大写刚好相反
*
* \f -> 匹配一个换页
* \n -> 匹配一个换行符
* \r -> 匹配一个回车符
* \t -> 匹配一个制表符
* \v -> 匹配一个垂直制表符*/
String pattern = "\\d{4}(\\-|\\/|.|_)\\d{1,2}\\1\\d{1,2}([^\\S]|[^\\s])\\d{1,2}(\\-|\\/|.|_|:)\\d{1,2}(\\-|\\/|.|_|:)\\d{1,2}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
/**验证是否为日期格式*/
public static Date judgeTime(String time){
String[] parsePatterns = {"yyyy-MM-dd","yyyy年MM月dd日",
"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd",
"yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyyMMdd","yyyy-MM-dd HH:mm:ss.SSSSSSS",
"YYYY_MM_DD","YYYY.MM.DD","YYYY.MM.DD HH:mm:ss","yyyy/MM/dd HH/mm/ss",
"yyyy.MM.dd HH.mm.ss","yyyy-MM-ddHH:mm:ss","yyyy/MM/ddHH:mm:ss","yyyyMMddHH:mm:ss",
"YYYY_MM_DD HH:mm:ss","yyyy-MM-dd HH-mm-ss"};
if(time==null){
return null;
}
try {
return org.apache.commons.lang3.time.DateUtils.parseDate(time,parsePatterns);
}catch (Exception e){
log.error("日期转换错误:"+e.getMessage());
return null;
}
}
利用Pattern和Matcher实现多个字符替换
场景描述:经常会遇到,需要做个功能,如给定如下代码的一串字符,要将某数据中的全部这些字符转换成某某,此时会用到,很多也都会用到将字符切割成一个一个,然后利用replaceAll(正则,最终要替换成的值)这样去做,其实会有个坑,当有特殊字符需要做进一步处理,当有更特殊的字符,会更加错误,如下代码会展示错误和正确用法。
遇到的坑
public static void main(String[] args) {
String shijian="~!@#¥%……&*()+字S9";
String bstr="9S2020S#0&91*0lpla!kkk@pkl";
String zhi=delSpecialChara(shijian);
System.out.println(zhi);
String astr=bstr.replaceAll(zhi,"好");
System.out.println(astr);
}
/**将指定所需过滤字符切割并重组为正则规则表达式*/
public static String delSpecialChar(String content){
String ruleContent=null;
if(!StringUtils.isEmpty(content)&&content!=null){
StringBuffer buffer=new StringBuffer();
for(int i=0;i<content.length();i++){
buffer.append("\\").append(content.charAt(i)).append("|");
}
ruleContent= buffer.deleteCharAt(buffer.length()-1).toString();
}
return ruleContent;
}
输出如下:
~|\!|@|#|\¥|%|\…|\…|&|*|\(|\)|+|\字|\S|\9
好好好好好好好好好好好好好好好好好好好好好好好好好好
惊不惊讶,难受不难受,把值全部干掉了,为什么,因为重点在\S这个上面,它在正则中表示的是什么,代表全部不为空的值全部匹配,正好小写s相反,这方面可以查看资料。
那好把它去掉,再看。
image.png
发现了什么,数字是不起作用的,如果想用这个也可以,不过需要在搞点手脚,可是作为程序员,哪来这么多闲心,既然不爽那就不用,下面就用又果断又舒服,一次性嘎嘎搞定的上场。
public static void main(String[] args) {
String shijiana="[~!@#¥%……&*()+字920SkpTYhm8]";
String bstr="9S2020S#0&91*0lpla!kkk@pkl";
System.out.println("正则结果值:"+zhengze(bstr,shijiana));
}
/**字符正则替换*/
public static String zhengze(String zhi,String biaodashi){
Pattern pattern=Pattern.compile(biaodashi);
Matcher matcher=pattern.matcher(zhi);
//将字符串中所有符合的特殊字符过滤,替换为指定值
String nstr=matcher.replaceAll("正");
return nstr;
}
输出如下:
image.png
网友评论