0

我有以下代码,需要将时间值从PT14H01M00S 替换14:01:00 以下代码省略了前两个字符,但我得到 14H01M00S ,没有使用字符串生成器就没有办法吗?

String time = "PT14H01M00S";
String substring = time .substring(2);
substring.replace("H", ":");
substring.replace("M", ":");
substring.replace("S", "");

System.out.println(substring);
4

8 回答 8

5

您可以使用正则表达式并替换

^..(\d\d)H(\d\d)M(\d\d)S$

$1:$2:$3

(我将代码的细节留给读者作为练习。)

于 2013-08-11T11:03:51.773 回答
4

你忘了做

String time = "PT14H01M00S";
String substring = time .substring(2);
substring = substring.replace("H", ":");
substring = substring.replace("M", ":");
substring = substring.replace("S", "");

System.out.println(substring);

所以substring没有得到从replace方法返回的新值

在这里运行它并得到

在此处输入图像描述

于 2013-08-11T11:00:20.747 回答
3

您似乎正在尝试解析和格式化JodaTime Period。您不应该使用 String 类 API 来执行此操作。使用 JodaTime API 中已提供的适当格式化程序。

您应该使用类构建 2 PeriodFormatters PeriodFormatterBuilder,一个用于将给定的字符串解析为 a Period,然后将第二个用于将其格式化Period为所需的格式:

String periodString = "PT14H01M00S";

PeriodFormatter parser = new PeriodFormatterBuilder()
        .appendLiteral("PT")
        .appendHours().appendSuffix("H")
        .appendMinutes().appendSuffix("M")
        .appendSeconds().appendSuffix("S")
        .toFormatter();

PeriodFormatter formatter = new PeriodFormatterBuilder()
        .minimumPrintedDigits(2)
        .printZeroAlways()
        .appendHours()
        .appendSeparator(":")
        .appendMinutes()
        .appendSeparator(":")
        .appendSeconds()
        .toFormatter();

System.out.println(formatter.print(parser.parsePeriod(periodString)));

输出:

14:01:00
于 2013-08-11T11:34:34.260 回答
2

改用此代码:

 String time = "PT14H01M00S";
 String substring = time .substring(2);
 substring = substring.replace("H", ":");
 substring = substring.replace("M", ":");
 substring = substring.replace("S", "");
于 2013-08-11T10:59:46.080 回答
2

我认为这应该有效

String time = "PT14H01M00S".substring(2, time.length - 1).replace(/H|M/, ":");
于 2013-08-11T11:01:34.810 回答
2

replace方法不会更改调用它的字符串,它会返回一个新字符串。

所以你想要的是:

String time = "PT14H01M00S";
String substring = time .substring(2);
substring = substring.replace("H", ":");
substring = substring.replace("M", ":");
substring = substring.replace("S", "");
于 2013-08-11T11:01:47.843 回答
2

我推荐使用正则表达式来完成这类任务。它们在搜索和替换文本模式方面非常强大。

于 2013-08-11T11:02:02.380 回答
2

改用此代码

 String substring = time .substring(2);
 substring = substring.replaceAll("[HM]",":").replace("S", "");
于 2013-08-11T11:03:30.147 回答