2013-04-24 55 views
1

我有一个时间戳:200212312359 我怎么可以拆分这2012.12.31.23.59如何将Java中的字符串拆分为不同大小的部分?

最简单的方法做的是.split("(?<=\\G.{2})"),然后再结合数组的第一个2元,但我想知道是否有任何,更专业的解决方案为了这。

+4

是的,有 - 根据你想要的日期模式使用一个正则表达式。一组4个数字,然后4组2个数字) – Colleen 2013-04-24 17:56:24

回答

6

您可以通过单个replaceAll调用获得相同的结果,并且可能会有一些过于复杂的正则表达式。

"200212312359".replaceAll("(^\\d{4}|\\d{2})(?!$)", "$1.") 

看,它在开始^\\d{4},或2-位\\d{2}其他地方匹配4位,对输入(?!$)的端部的负先行以避免最后一对匹配。然后用连接到数字的点代替4或2位数字。

0

对于您的解决方案,没有什么必然是不专业的;它只是不直观。如果你用简单的解释来说明它分裂的日期格式,那么它就像任何其他的IMHO一样是一个专业的解决方案。

0

此外,如果你知道每个值(点分离),你可以使用子方法的位置:

String unformatted = String.valueOf(200212312359); 
String year = unformatted.substring(0,4); 
String month = unformatted.substring(4,6); 
String day = unformatted.substring(6,8); 
String hour = unformatted.substring(8,10); 
String minute = unformatted.substring(10,12); 
String formatted = String.format("%s.%s.%s.%s.%s", year, month, day, hour, minute); 

请仔细阅读http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

0

正如科琳的评论指出,你可以使用组创建新的格式化日期。下面是例子

Pattern p = Pattern.compile("^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})$"); 
Matcher m = p.matcher("200212312359"); 
StringBuilder sb = new StringBuilder(); 
if (m.find()) { 
    sb.append(m.group(1)); 
    for (int i = 2; i <= m.groupCount(); i++) 
     sb.append(".").append(m.group(i)); 
} 
System.out.println(sb); 

输出:2002.12.31.23.59

您还可以使用named-groups来命名每一个组,并用它们来代替他们的数字:

Pattern p2 = Pattern.compile("^(?<year>\\d{4})(?<month>\\d{2})" + 
     "(?<day>\\d{2})(?<hour>\\d{2})(?<minute>\\d{2})$"); 
Matcher m2 = p2.matcher("200212312359"); 
if (m2.find()) { 
    String formatedDate = m2.group("year") + "." + m2.group("month") 
      + "." + m2.group("day") + "." + m2.group("hour") 
      + "." + m2.group("minute"); 
    System.out.println(formatedDate); 
} 

您还可以更新您的分裂以防止像这样的前两位数字分割

"200212312359".split("(?<=^\\d{4}|(?!^)\\G.{2})" 
相关问题