java - 解析时不忽略空格 - Java

标签 java regex string parsing

我有以下字符串输入(来自 netstat -a 命令):

Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    11453    /run/systemd/shutdownd
unix  2      [ ]         DGRAM                    7644     /run/systemd/notify
unix  2      [ ]         DGRAM                    7646     /run/systemd/cgroups-agent
unix  5      [ ]         DGRAM                    7657     /run/systemd/journal/socket
unix  14     [ ]         DGRAM                    7659     /dev/log
unix  3      [ ]         STREAM     CONNECTED     16620
unix  3      [ ]         STREAM     CONNECTED     16621

同时我尝试将上面的字符串解析为:

// lines is an array representing each line above
for (int i = 0; i < lines.length; i++) {
    String[] tokens = lines[i].split("\\s+");
}

我想要将 token 作为包含7个条目的数组[Proto、RefCnt、Flag、Type、State、I-Node、Path]。相反,我获取了一个数组,其中不包括 Flags 下的括号和空的 State:

["unix", "2", "[", "]", "DGRAM", "11453", "/run/systemd/shutdownd"]

而不是

["unix", "2", "[]", "DGRAM", "", "11453", "/run/systemd/shutdownd"]

如何修复我的正则表达式以产生正确的输出?

最佳答案

您需要将正则表达式中的最小空格长度设置为2,尝试像这样分割:

String[] tokens = lines[i].split("\\s{2,16}+");

或者像 @revo 建议使用环视,如下所示:

String[] tokens = lines[i].split("(?<!\\[)\\s{2,16}+(?!\\])");

关于java - 解析时不忽略空格 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40929047/

相关文章:

java - 打印字符串数组中的所有名称

java - 使用 spring Autowiring 从 java 中的静态类调用非静态方法?

php - 从 Base64 字符串中提取图像尺寸

php - 调用 PHP explode 并访问第一个元素?

python - 在 python 中,为什么调用字符串 "X"会以 ASCII 显示它,而调用 "print X"将其显示为 unicode ?

java - 一种在设备上保存 Arraylist 的方法?

java - 为什么 $MockitoMock$ 实例没有被识别为模拟?

正则表达式 : Add a character before the first occurrence of a digit in a line

java - java中如何忽略空格和空行

Python 分割函数。解包错误的值太多