我正在解析一个文件,它有基于时间的条目.格式如下:
00:02:10-XYZ:Count=10
00:04:50-LMK:Count=3
Run Code Online (Sandbox Code Playgroud)
这里我想要的是从字符串行中提取时间值
我搜索了许多链接,但无法找到我想要的东西,最终我写了这段代码.
Pattern pattern = Pattern.compile("((?i)[0-9]{1,2}:??[0-9]{0,2}:??[0-9]{0,2})"); //(?i)[0-9]{1,2}:??[0-9]{0,2}:??[0-9]{0,2} //\\d{1,2}:\\d{1,2}:\\d{1,2}
Matcher matcher;
List<String> listMatches;
Run Code Online (Sandbox Code Playgroud)
下面是我应用逻辑的循环
for(int x = 0; x < file_content.size(); x++)
{
matcher= pattern.matcher(file_content.get(x));
listMatches = new ArrayList<String>();
while(matcher.find())
{
listMatches.add(matcher.group(1));
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望当"matcher.find()"给出为true时,它会在第一次迭代中返回[00:02:10],在第二次迭代中返回[00:04:50].
看起来像一个不必要的复杂模式....为什么不只是(如果你正在进行逐行处理):
"^(\\d\\d:\\d\\d:\\d\\d)"
Run Code Online (Sandbox Code Playgroud)
如果您正在进行多行处理,您将需要使用:
"(?m)^(\\d\\d:\\d\\d:\\d\\d)"
Run Code Online (Sandbox Code Playgroud)
这是一些示例代码和输出:
public static void main(String[] args) {
final Pattern pattern = Pattern.compile("(?m)^(\\d\\d:\\d\\d:\\d\\d)");
final Matcher matcher = pattern.matcher("00:02:10-XYZ:Count=10\n00:04:50-LMK:Count=3");
while(matcher.find())
{
System.out.printf("[%s]\n", matcher.group(1));
}
}
Run Code Online (Sandbox Code Playgroud)
输出
[00:02:10]
[00:04:50]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10652 次 |
| 最近记录: |