2010-08-31 80 views
1

我正在解析几个文档与Duration字段。但在型动物文件,它是在不同的充格式,例如:解析前检查日期格式

"Duration": "00:43" 
"Duration": "113.046" 
"Duration": "21.55 s" 

我想所有这些分析的格式"Duration": "113.046",我怎么会在至极格式是任何解析之前检查?

这段代码之前的一些条件,因为这不是适合所有的人:

Long duration; 
        DateFormat sdf = new SimpleDateFormat("hh:mm:ss"); 
        try { 
         Date durationD = sdf.parse(totalDuration); 
         Date zeroSec = sdf.parse("00:00:00"); 
         duration = durationD.getTime() - zeroSec.getTime(); 
        } catch (Exception e) {      
          duration = Long.parseLong(totalDuration);      
        } 

在此先感谢

回答

1

您可以在regex的帮助下匹配该模式,然后相应地使用format。这里有一个开球例如:

Map<Pattern, DateFormat> dateFormatPatterns = new HashMap<Pattern, DateFormat>(); 
dateFormatPatterns.put(Pattern.compile("\\d{1,2}:\\d{2}"), new SimpleDateFormat("H:m")); 
dateFormatPatterns.put(Pattern.compile("\\d{1,3}\\.\\d{3}"), new SimpleDateFormat("s.S")); 
dateFormatPatterns.put(Pattern.compile("\\d{1,2}\\.\\d{2} s"), new SimpleDateFormat("s.S 's'")); 

String[] strings = { "00:43", "113.046", "21.55 s" }; 
DateFormat finalFormat = new SimpleDateFormat("HH:mm:ss"); 

for (String string : strings) { 
    for (Pattern pattern : dateFormatPatterns.keySet()) { 
     if (pattern.matcher(string).matches()) { 
      Date date = dateFormatPatterns.get(pattern).parse(string); 
      String formattedTime = finalFormat.format(date); 
      System.out.println(formattedTime); 
      break; 
     } 
    } 
} 

此此处得到

 
00:43:00 
00:01:53 
00:00:21 
+0

像这样的错误就是我一直在寻找的东西。 谢谢! – 2010-08-31 12:32:05

+0

不客气。 – BalusC 2010-08-31 12:33:37

1

如果这些是你所有的已知输入格式,那么你的输入转换为您的预期日期格式。

只是字符串 - 全部替换:.并删除s

+0

什么用具有这种格式的文件办?? “持续时间”:“113.046” 没有必要解析它们,但我需要知道它之前的一些东西。 无论如何感谢 – 2010-08-31 10:46:42

1

不要忘记去除空间。顺便说一句,“113.046”对我来说似乎有点奇怪 - 如果我在你的鞋子里,我会使用一些标准的日期时间格式并转换不规则的日期格式。

+0

我想转换为长时间的秒数。任何建议? – 2010-08-31 10:56:10

0

我的解决方案,不聪明都:

long DurationFixer(String duration){ 
     long durationLong = 0; 

     if(duration.contains(":")){ 
      DateFormat sdf = new SimpleDateFormat("mm:ss"); 
      try { 
       Date durationD = sdf.parse(duration); 
       Date zeroSec = sdf.parse("00:00:00"); 
       durationLong = durationD.getTime() - zeroSec.getTime(); 
      } catch (Exception e) {      
       durationLong = (Long.parseLong(duration))/1000;      
      } 
     } 
     else{ 
      String r = ""; 
      if(duration.contains("s")){ 
        for (int i = 0; i < duration.length()-2; i ++) { 
          if ((duration.charAt(i) == '.')) 
           break; 
          else 
           r += duration.charAt(i); 
        } 
      } 
      durationLong = Long.valueOf(r); 
     } 
     return durationLong;   
    } 

如果有人能找到一个更好的解决办法,请告诉我。 谢谢大家!