Java “转换字符串”;5m 12s 635ms“;至;05:12:635“;

Java “转换字符串”;5m 12s 635ms“;至;05:12:635“;,java,Java,我需要转换如下所示的字符串: “5m 12s 635ms” “5米12秒” “12s 635ms” 等等 注意:字符串可能包含也可能不包含任何单个时间元素 格式为: hh:mm:ss.SSS 有没有一个简单的方法可以做到这一点?我看了SimpleDataFormat,它不需要输入字符串来转换 -Greg我在jdk/joda中找不到支持的库/方法。如果您可以使用自定义方法,下面是一个可以使用的方法 公共静态void main(字符串[]args){ 字符串输入=“5m 12s 635ms”; 字

我需要转换如下所示的字符串:

“5m 12s 635ms” “5米12秒” “12s 635ms” 等等

注意:字符串可能包含也可能不包含任何单个时间元素

格式为: hh:mm:ss.SSS

有没有一个简单的方法可以做到这一点?我看了SimpleDataFormat,它不需要输入字符串来转换


-Greg

我在jdk/joda中找不到支持的库/方法。如果您可以使用自定义方法,下面是一个可以使用的方法


公共静态void main(字符串[]args){
字符串输入=“5m 12s 635ms”;
字符串输入2=“5m 12s”;
字符串输入3=“12s 635ms”;
字符串输入4=“6h 5m 12s 635ms”;
System.out.println(格式化程序(输入));
// 00:05:12.635
System.out.println(格式化程序(input2));
// 00:05:12.000
System.out.println(格式化程序(input3));
// 00:00:12.635        
System.out.println(格式化程序(input4));
// 06:05:12.635
}
字符串格式化程序(字符串输入){
字符串[]inputArray=input.split(“”);
字符串格式=”;
长h=0,m=0,s=0,ms=0;
for(字符串i:输入阵列){
如果(i.endsWith(“ms”)){
ms=长数值of(即替换(“ms”),“”);
}否则,如果(i.endsWith(“h”)){
h=长数值(即替换(“h”),“”);
}否则,如果(i.endsWith(“m”)){
m=长数值(即替换(“m”);
}否则,如果(i.endsWith(“s”)){
s=长数值(即替换(“s”);
}
}
格式=字符串。格式(“%02d:%02d:%02d.%03d”,h、m、s、ms);
返回格式;
}

我在jdk/joda中找不到支持的库/方法。如果您可以使用自定义方法,下面是一个可以使用的方法


公共静态void main(字符串[]args){
字符串输入=“5m 12s 635ms”;
字符串输入2=“5m 12s”;
字符串输入3=“12s 635ms”;
字符串输入4=“6h 5m 12s 635ms”;
System.out.println(格式化程序(输入));
// 00:05:12.635
System.out.println(格式化程序(input2));
// 00:05:12.000
System.out.println(格式化程序(input3));
// 00:00:12.635        
System.out.println(格式化程序(input4));
// 06:05:12.635
}
字符串格式化程序(字符串输入){
字符串[]inputArray=input.split(“”);
字符串格式=”;
长h=0,m=0,s=0,ms=0;
for(字符串i:输入阵列){
如果(i.endsWith(“ms”)){
ms=长数值of(即替换(“ms”),“”);
}否则,如果(i.endsWith(“h”)){
h=长数值(即替换(“h”),“”);
}否则,如果(i.endsWith(“m”)){
m=长数值(即替换(“m”);
}否则,如果(i.endsWith(“s”)){
s=长数值(即替换(“s”);
}
}
格式=字符串。格式(“%02d:%02d:%02d.%03d”,h、m、s、ms);
返回格式;
}
格式为:hh:mm:ss.SSS

这项工作如下:

  • xxs
    yyyms
    转换为
    xx.yyys
  • 然后简单地解析持续时间并添加到
    LocalTime
    实例中
印刷品

      5m 12s 635ms --> 00:05:12.635
            5m 12s --> 00:05:12.000
         12s 635ms --> 00:00:12.635
 1h  17m 12s 998ms --> 01:17:12.998
          2h 222ms --> 02:00:00.222
如果您的秒数已经是ss.sss格式(例如 12.635s)。但是
replaceAll
处理了它

格式为:hh:mm:ss.SSS

这项工作如下:

  • xxs
    yyyms
    转换为
    xx.yyys
  • 然后简单地解析持续时间并添加到
    LocalTime
    实例中
印刷品

      5m 12s 635ms --> 00:05:12.635
            5m 12s --> 00:05:12.000
         12s 635ms --> 00:00:12.635
 1h  17m 12s 998ms --> 01:17:12.998
          2h 222ms --> 02:00:00.222
如果您的秒数已经是ss.sss格式(例如
12.635s)。但是
replaceAll
处理了它。

您可以使用正则表达式来解析输入字符串。您可以在regex101.comSplit的空格处试用它们,循环各部分,检查它们是否以您的一个单位(s、ms、m…)结尾,并根据结果构造一个日期或字符串。您可以尝试使用两个
simpleDataFormat
s,一个用于解析,另一个用于格式化字符串。提示:最好使用标准字符串(例如:
PT5M12.635S
)使用Java类
Java.time.Duration
,在一段时间内。您可以使用正则表达式来解析输入字符串。您可以在regex101.comSplit的空格处试用它们,循环各部分,检查它们是否以您的一个单位(s、ms、m等)结尾并从结果中构造一个日期或字符串。您可以尝试使用两个
SimpleDataFormat
s,一个用于解析,另一个用于格式化字符串。提示:最好在Java类
Java.time.Duration
的情况下,在一段时间内使用标准字符串(例如:
PT5M12.635S
)。