タイムスタンプがあります:200212312359
これを分割するにはどうすればよいですか2012.12.31.23.59
簡単な方法は.split("(?<=\\G.{2})")
、配列の最初の 2 つの要素を結合することですが、これに対するより専門的な解決策があるかどうか疑問に思っていました。
また、各値の位置 (ドット区切り) がわかっている場合は、部分文字列メソッドを使用できます。
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
名前付きグループを使用してすべてのグループに名前を付け、番号の代わりに使用することもできます。
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);
}
このように最初の 2 桁で分割されないように分割を更新することもできます
"200212312359".split("(?<=^\\d{4}|(?!^)\\G.{2})"
あなたのソリューションは、必ずしも専門外ではありません。それは直感的ではありません。分割する日付形式の簡単な説明でコメントすると、それは他の私見と同じくらい専門的なソリューションです。