for example String s = "2011\\D*06\\D*21"; s = s.replaceAll("\\D*", ""); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date d = sdf.parse(s); System.out.println(d);
Pattern p = Pattern.compile("\\d{4}|(?<=\\D*)\\d{2}\\b"); String str = "2010gaahgvglgaog?::11"; StringBuffer sb= new StringBuffer(); Matcher m = p.matcher(str); while(m.find()) { sb.append(m.group()); } if(sb.toString().equals("")) { System.out.println("格式输入错误"); } else { sb.insert(4, '-'); System.out.println(sb.toString()); }
package com.ex ;import java.util.Date ;
import java.text.SimpleDateFormat ;
import java.util.regex.Pattern ;
import java.util.regex.Matcher ;
public class Test{/**
*
* @param str
* 需要过滤的字符串
* @return
* @Description:过滤数字以外的字符
*/
public static String filterUnNumber(String str) {
// 只允数字
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
//替换与模式匹配的所有字符(即非数字的字符将被""替换)
return m.replaceAll("").trim();
}
public static void main(String args[]){
String str = "2011ABC06rrrABCDe21ss00www40ere30" ;
String strDate = Test.filterUnNumber(str) ;
StringBuffer sb = new StringBuffer("");
if (strDate.length() == 14 ){ //假设只有日期20110621004030 -- 2011-06-21 00:40:30
sb.append(strDate.substring(0, 4)) ;
sb.append("-") ;
sb.append(strDate.substring(4, 6)) ;
sb.append("-") ;
sb.append(strDate.substring(6, 8)) ;
sb.append(" ") ;
sb.append(strDate.substring(8, 10)) ;
sb.append(":") ;
sb.append(strDate.substring(10, 12)) ;
sb.append(":") ;
sb.append(strDate.substring(12, 14)) ;
System.out.println(sb.toString() ) ;
System.out.println(strDate ) ;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
try{
Date date = sdf.parse(sb.toString()) ;
}catch(Exception e){
e.printStackTrace() ;
}
}else{
System.out.println("格式不对") ;
}
}
}
不知道这是不是你需要的,自作多情啦。
2011-06-21 00:40:30
20110621004030
String s = "2011\\D*06\\D*21";
s = s.replaceAll("\\D*", "");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date d = sdf.parse(s);
System.out.println(d);
Pattern p = Pattern.compile("\\d{4}|(?<=\\D*)\\d{2}\\b");
String str = "2010gaahgvglgaog?::11";
StringBuffer sb= new StringBuffer();
Matcher m = p.matcher(str);
while(m.find()) {
sb.append(m.group());
}
if(sb.toString().equals("")) {
System.out.println("格式输入错误");
}
else {
sb.insert(4, '-');
System.out.println(sb.toString());
}
yyyy\\D*MM\\D*dd
==>"\\d{4}[^\\d]+?\\d{2}[^\\d]+?\\d{2}"
只要月份就用SimpleDateFormat d= new SimpleDateFormat("yyyyMM");
把处理好的StringBuffer sb丢进去进行格式化吧。
谢谢了,还有些帮助滴,不过 感觉多数处理方法都一样,都得先预处理字符串,然后用SimpleDateFormat等方法做
额 ,\\d{4}\\D*\\d{2}\\D*\\d{2}短点……嘿嘿,不过这样的正则表达式还是不够健全哦,"2011-13-32"、"2011-02-29" 这样的 咋办,再继续判断?