Java 仅从字符串中提取部分(持续时间)

Java 仅从字符串中提取部分(持续时间),java,Java,我使用以下命令查找mp3文件的持续时间: $ffmpeg-i audiofile.mp3 2>&1 | grep持续时间 持续时间:01:02:20.20,开始时间:0.000000,比特率:128 kb/s 如何使用Java codemethod从上述结果中提取持续时间01:02:20.20 提前谢谢 Antonis正则表达式将是一个很好的起点 String str = Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s int

我使用以下命令查找mp3文件的持续时间:

$ffmpeg-i audiofile.mp3 2>&1 | grep持续时间

持续时间:01:02:20.20,开始时间:0.000000,比特率:128 kb/s

如何使用Java codemethod从上述结果中提取持续时间01:02:20.20

提前谢谢


Antonis

正则表达式将是一个很好的起点

String str = Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s

int startIndex = str.indexOf(":");  
int endIndex = str.indexOf(",");

str.subString(startIndex,endIndex); //your result  
str.trim();
注意:假设格式保持不变

I love String.split:


此命令以空格或逗号分隔。

如果通过Runtime.exec或ProcessBuilder运行此命令,则可以运行:

ffmpeg -i audiofile.mp3 2>&1 | grep Duration | cut -d, -f1 | cut -d' ' -f2

要直接获得持续时间,不要用Java进行解析。

如果要在计算中使用时间,需要解析组成部分

String string = "Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s";

// This expects 3 millisecond digits, as specified by [ffmpeg docs]*, though
// sample only has 2... maybe it's variable - adjust as needed
Pattern p = Pattern.compile("([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\\.([0-9]{3}))?");
Matcher m = p.matcher(string);

if (m.find()) {
    int h = Integer.parseInt(m.group(1));
    int m = Integer.parseInt(m.group(2));
    int s = Integer.parseInt(m.group(3));
    int ms = Integer.parseInt(m.group(4));
    // do some time math
}

.

你不觉得正则表达式在这方面太过了吗?我想你需要int startIndex=str.indexOf;+1.OP只需要持续时间01:02:20.20,而不需要字符串持续时间:。不过,我也会使用String.split。@Jaime-它在我的机器上按预期工作:Duration:不是结果的一部分,它在Duration值之前的空格上进行拆分oops,对不起,我以为您只在逗号上进行了拆分。我这样做了,它没有打印空字符串?
String string = "Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s";

// This expects 3 millisecond digits, as specified by [ffmpeg docs]*, though
// sample only has 2... maybe it's variable - adjust as needed
Pattern p = Pattern.compile("([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\\.([0-9]{3}))?");
Matcher m = p.matcher(string);

if (m.find()) {
    int h = Integer.parseInt(m.group(1));
    int m = Integer.parseInt(m.group(2));
    int s = Integer.parseInt(m.group(3));
    int ms = Integer.parseInt(m.group(4));
    // do some time math
}