gpt4 book ai didi

java - 在 Java 中解析 Windows 任务列表输出

转载 作者:可可西里 更新时间:2023-11-01 11:44:52 24 4
gpt4 key购买 nike

我正在尝试构建一个在我的机器上运行的进程数组;为此,我一直在尝试使用以下两个命令:

tasklist /fo csv /nh        # For a CSV output
tasklist /nh # For a non-CSV output

我遇到的问题是无法正确解析输出。

第一个场景

我有这样一行:

"wininit.exe","584","Services","0","5,248 K"

我曾尝试使用 "".split(",") 进行解析,但是当涉及到进程内存使用时,这会失败 - 数字字段中的逗号将导致额外的字段。

第二种情况

没有非 CSV 输出,我有这样一行:

wininit.exe                    584 Services                   0      5,248 K

我正在尝试使用 "".split("\\s+") 进行解析,但是这个现在在 System Idle Process 或任何进程上失败可执行名称中有空格的其他进程。

How can I parse either of these output such that the same split index will always contain the correct data column?

最佳答案

要解析一个字符串,总是喜欢最严格的格式。在这种情况下,CSV。这样,您可以使用包含五个组的正则表达式处理每一行:

private final Pattern pattern = Pattern
.compile("\\\"([^\\\"]*)\\\",\\\"([^\\\"]*)\\\",\\\"([^\\\"]*)\\\",\\\"([^\\\"]*)\\\",\\\"([^\\\"]*)\\\"");

private void parseLine(String line) {

Matcher matcher = pattern.matcher(line);

if (!matcher.find()) {
throw new IllegalArgumentException("invalid format");
}

String name = matcher.group(1);
int pid = Integer.parseInt(matcher.group(2));
String sessionName = matcher.group(3);
String sessionId = matcher.group(4);
String memUsage = matcher.group(5);

System.out.println(name + ":" + pid + ":" + memUsage);
}

关于java - 在 Java 中解析 Windows 任务列表输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47982984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com