我有一個時間戳:200212312359
我怎麼可以拆分這2012.12.31.23.59
如何將Java中的字符串拆分爲不同大小的部分?
最簡單的方法做的是.split("(?<=\\G.{2})")
,然後再結合數組的第一個2元,但我想知道是否有任何,更專業的解決方案爲了這。
我有一個時間戳:200212312359
我怎麼可以拆分這2012.12.31.23.59
如何將Java中的字符串拆分爲不同大小的部分?
最簡單的方法做的是.split("(?<=\\G.{2})")
,然後再結合數組的第一個2元,但我想知道是否有任何,更專業的解決方案爲了這。
您可以通過單個replaceAll
調用獲得相同的結果,並且可能會有一些過於複雜的正則表達式。
"200212312359".replaceAll("(^\\d{4}|\\d{2})(?!$)", "$1.")
看,它在開始^\\d{4}
,或2-位\\d{2}
其他地方匹配4位,對輸入(?!$)
的端部的負先行以避免最後一對匹配。然後用連接到數字的點代替4或2位數字。
對於您的解決方案,沒有什麼必然是不專業的;它只是不直觀。如果你用簡單的解釋來說明它分裂的日期格式,那麼它就像任何其他的IMHO一樣是一個專業的解決方案。
此外,如果你知道每個值(點分離),你可以使用子方法的位置:
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
正如科琳的評論指出,你可以使用組創建新的格式化日期。下面是例子
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})"
是的,有 - 根據你想要的日期模式使用一個正則表達式。一組4個數字,然後4組2個數字) – Colleen 2013-04-24 17:56:24