【问题标题】:Remove a timestamp from string从字符串中删除时间戳
【发布时间】:2016-08-31 19:07:49
【问题描述】:

所以我一直试图从一个字符串中去掉一个时间戳,一个更具体的文件名。

我尝试制作一个子字符串,但时间戳的大小是可变的。

例如,有时是这样的:

2016-05-05 03:45:00.907text.txt

有时像这样:

2016-05-05 03:45:00.83text.txt

也许正则表达式就是答案?

要处理的字符串总是有一个时间戳加上一个文件名。文件名可以以数字或字母开头。

我忘了说它是用于 Java 的。

【问题讨论】:

  • text.txt 总是相同的长度吗?或者只是使用正则表达式
  • 文件名会包含数字吗?
  • 是的,它可以包含数字@GrumpyCrouton
  • 不,时间戳后面的文本始终是可变的@EatPeanutButter
  • 问题是:如何定义时间戳和文件名的边界?

标签: java regex string timestamp substring


【解决方案1】:

sed 将清除时间戳

$ echo "2016-05-05 03:45:00.83text.txt" | 
 sed -r 's/^[0-9]{4}(-[0-9]{2}){2} ([0-9]{2}:){2}[0-9]{2}\.[0-9]{2,3}//'

text.txt

也适用于其他情况,但如果您的文件名是“7text.txt”,它不会知道区别。

【讨论】:

    【解决方案2】:
    String input = "2016-05-05 03:45:00.907text.txt";
    String regex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d+";
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    
    if(matcher.find()){
        String output  =  matcher.group();
    
        Date date = formatter.parse(output);
        long time = date.getTime();
    
        System.out.println(time);
    }
    

    您必须使用正则表达式找到日期,然后将字符串转换为适当的日期,然后您可以获得时间戳。

    【讨论】:

      【解决方案3】:

      这将删除前导时间戳:

      filename = filename.replaceAll("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(\\.\\d+)?", "");
      

      但是当另一部分以数字开头时,您将无法区分“短”时间戳的结尾和另一部分的开头。

      这也适用于时间戳为整秒(并且没有小数结尾)的情况。

      【讨论】:

        猜你喜欢
        • 2019-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        • 2013-08-29
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        相关资源
        最近更新 更多