如何将Java中的字符串拆分为不同大小的部分?

如何将Java中的字符串拆分为不同大小的部分?,java,regex,split,Java,Regex,Split,我有一个时间戳:200212312359 如何将此拆分为2012.12.31.23.59 简单的方法是。拆分?你的解决方案没有什么不专业的地方;这不是直觉。如果你用一个简单的解释来解释它拆分的日期格式,那么这是一个和其他任何解决方案一样专业的解决方案,IMHO。你的解决方案没有什么不专业的地方;这不是直觉。如果你用一个简单的解释来解释它拆分的日期格式,那么这是一个和其他任何解决方案一样专业的解决方案,IMHO。你可以通过一个replaceAll调用和一个过于复杂的正则表达式得到同样的结果 "20

我有一个时间戳:200212312359 如何将此拆分为2012.12.31.23.59


简单的方法是。拆分?你的解决方案没有什么不专业的地方;这不是直觉。如果你用一个简单的解释来解释它拆分的日期格式,那么这是一个和其他任何解决方案一样专业的解决方案,IMHO。

你的解决方案没有什么不专业的地方;这不是直觉。如果你用一个简单的解释来解释它拆分的日期格式,那么这是一个和其他任何解决方案一样专业的解决方案,IMHO。

你可以通过一个replaceAll调用和一个过于复杂的正则表达式得到同样的结果

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

如果分解,它将匹配起始^\\d{4}处的4位数字,或其他任何地方的2位\\d{2},并在输入结束时具有负前瞻性?!$以避免匹配最后一对。然后,它用一个连接到数字的点替换4或2个数字。

您可以通过一个replaceAll调用和一个过于复杂的正则表达式得到相同的结果

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

如果分解,它将匹配起始^\\d{4}处的4位数字,或其他任何地方的2位\\d{2},并在输入结束时具有负前瞻性?!$以避免匹配最后一对。然后,它将4或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);

请阅读

此外,如果您知道分隔的每个值点的位置,您可以使用子字符串方法:

 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);

请阅读

正如科琳在评论中指出的那样,您可以使用组来创建新的格式化日期。下面是一个例子

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);
您还可以更新拆分,以防止像这样拆分前两个数字

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

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

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);
您还可以更新拆分,以防止像这样拆分前两个数字

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

有-根据您想要的日期模式使用正则表达式,即一组4个数字,然后是4组2个数字有-根据您想要的日期模式使用正则表达式,即一组4个数字,然后是4组2个数字