在java中解析这个字符串的最佳方法是什么?

时间:2013-02-22 13:57:01

标签: java parsing

在java中解析这个字符串的最佳方法是什么?

Admin State    State          Type             Interface Name
-------------------------------------------------------------------------
Enabled        Connected      Dedicated        Local Area Connection

Enabled        Connected      Dedicated        Local Area Connection 2

每个单词之间是空格,不是制表符,不是任何其他东西,因为你可以看到空格的数量不相等,而且在“局部区域连接”之类的单词之间也是空格。

实际上我想要所有网络接口的名称和它们的状态。 这是windows中“netsh”命令的输出。 (如果你知道其他命令,女巫可以把这个信息作为关键:值,它会有帮助。或者这个命令可能有一个参数来格式化它?)

如果我能得到这样的东西,它会有很多帮助:

接口名称:本地连接
类型:专用
州:已连接
管理状态:已启用

接口名称:本地连接2
类型:专用
州:已连接
管理状态:已启用

6 个答案:

答案 0 :(得分:2)

您应该使用Java功能来获取网络接口。课程NetworkInterface提供您正在寻找的内容。

您可以在此处找到示例:Listing Network Interface Addresses

答案 1 :(得分:2)

BufferedReader b = new BufferedReader(new StringReader(myString));

String line;
while (!(line = b.readLine()).startsWith("-----")) {/*skip*/};

while ((line = b.readLine()) != null) {
    if (line.trim().equals("")) continue; // skip blank lines
    String[] splat = line.split(" +",4);
    System.out.println("Interface Name : " + splat[3]);
    System.out.println("Type : " + splat[2]);
    System.out.println("State : " + splat[1]);
    System.out.println("Admin State : " + splat[0]);
}
b.close();

答案 2 :(得分:1)

如果列的宽度已知,请使用String.substring(..)获取每列& trim()结果。

答案 3 :(得分:0)

如果你知道这些职位,你可以这样做

String state = line.substring(15, 30).trim();

如果您不知道,则解析已知标题的第一行(如line.indexOf("State")),这将告诉您这些位置。

// for the header line
int stateBegin = line.indexOf("State");
int typeBegin = line.indexOf("Type");

// for all other lines
String state = line.substring(stateBegin, typeBegin).trim();

答案 4 :(得分:0)

如果没有列分隔符:

1 - 它似乎是固定大小的字段。这意味着列将始终具有X个字符,下一个列将始终从X + 1开始。例如,“Admin State”将始终包含15个字符,“State”将始终以第16个字符开头。 “州”也有15个字符[...]

2 - 如果固定大小的字段不起作用,您可以尝试解析2个空格,但它容易出错

答案 5 :(得分:0)

String s ="Admin State    State          Type             Interface Name";
String[] str = s.split("  +");
for(String ss: str)
    System.out.println(ss);

尝试使用上面的代码将String拆分为多个空格。

输出:

Admin State
State
Type
Interface Name