【问题标题】:How do I split a string in Java to different size parts?如何将Java中的字符串拆分为不同大小的部分?
【发布时间】:2013-04-18 09:58:54
【问题描述】:

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

简单的方法是.split("(?<=\\G.{2})"),然后合并数组的前2个元素,但我想知道是否有任何更专业的解决方案。

【问题讨论】:

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

标签: java regex split


【解决方案1】:

您的解决方案不一定不专业;它只是不直观。如果您通过简单解释它拆分的日期格式来评论它,那么这与任何其他解决方案一样专业,恕我直言。

【讨论】:

    【解决方案2】:

    您可以通过单个 replaceAll 调用和有点过于复杂的正则表达式获得相同的结果。

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

    分解后,它匹配开头的 4 位数字 ^\\d{4},或匹配其他任何地方的 2 位数字 \\d{2},在输入 (?!$) 的末尾带有负前瞻以避免匹配最后一对。然后它将 4 或 2 位数字替换为连接到数字的点。

    【讨论】:

      【解决方案3】:

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

       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

      【讨论】:

        【解决方案4】:

        正如 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})"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-16
          • 2023-04-02
          相关资源
          最近更新 更多