[英]How do I split a string in Java to different size parts?
我有一個時間戳: 200212312359
如何將其拆分為2012.12.31.23.59
最簡單的方法是.split("(?<=\\\\G.{2})")
,然后合並數組的前2個元素,但是我想知道是否有任何更專業的解決方案。
您可以通過一個replaceAll
調用和一個過於復雜的正則表達式來獲得相同的結果。
"200212312359".replaceAll("(^\\d{4}|\\d{2})(?!$)", "$1.")
細分后,它會匹配開頭^\\\\d{4}
位數字或其他任何位置的2位數字\\\\d{2}
,並在輸入的末尾(?!$)
前面使用負號來避免匹配最后一對。 然后,將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
正如Colleen在評論中指出的那樣,您可以使用組來創建新的格式化日期。 這是例子
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})"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.