我有以下字符串输入(来自 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/