【发布时间】:2017-12-26 19:36:11
【问题描述】:
我正在尝试构建在我的机器上运行的一系列进程;为此,我一直在尝试使用以下两个命令:
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 之类的进程上失败,或者在可执行文件名称中有空格的任何其他进程上失败。
如何解析这些输出中的任何一个,以便相同的拆分索引始终包含正确的数据列?
【问题讨论】:
-
您是否尝试过使用 CSV 解析器而不是仅在逗号上拆分? CSV 通常定义良好,良好的解析器可以正确解释引号,而不是在每个逗号处拆分。
-
我希望使用尽可能少的外部库来实现这一点,最好不要。这项任务似乎很简单,只是想知道最好的方法是什么。
标签: java string windows split tasklist