问题:现用户输入一字符串,其格式大致为yyyy\\D*MM\\D*dd,即四位数字年加上任意长度的非数字字符,再接两位月份……
需求:将其格式化成日期(Date)

解决方案 »

  1.   

    先清除非数字字符,然后用SimpleDateFormat处理
      

  2.   


    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("格式不对") ;
         }
        }
     }
    不知道这是不是你需要的,自作多情啦。
      

  3.   

    E:\>java com.ex.Test
    2011-06-21 00:40:30
    20110621004030
      

  4.   

    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);
      

  5.   


    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());
    }
      

  6.   

    楼上的正则挺适合的
    yyyy\\D*MM\\D*dd
    ==>"\\d{4}[^\\d]+?\\d{2}[^\\d]+?\\d{2}"
      

  7.   

    晕,你要弄成Date啊。。
    只要月份就用SimpleDateFormat d= new SimpleDateFormat("yyyyMM");
    把处理好的StringBuffer sb丢进去进行格式化吧。
      

  8.   


    谢谢了,还有些帮助滴,不过 感觉多数处理方法都一样,都得先预处理字符串,然后用SimpleDateFormat等方法做
      

  9.   


    额 ,\\d{4}\\D*\\d{2}\\D*\\d{2}短点……嘿嘿,不过这样的正则表达式还是不够健全哦,"2011-13-32"、"2011-02-29" 这样的 咋办,再继续判断?
      

  10.   

    先正则判断再simpledataformat比较好。。