1

我有一个来自 ssh 的输出,如下所示。我想使用 java 将以下输出解析为哈希图。任何建议都会有所帮助...

Name        : mysql                        Relocations: (not relocatable)
Version     : 5.1.61                            Vendor: CentOS
Release     : 4.el6                         Build Date: Fri 22 Jun 2012 05:58:59 AM PDT
Install Date: Tue 13 Nov 2012 02:23:23 AM PST      Build Host: c6b10.bsys.dev.centos.org
URL         : http://www.mysql.com
Summary     : MySQL client programs and shared libraries

我的输出应该是一个像

核心价值

名称 mysql

重定位(不可重定位)

版本 5.1.61

发布 4.el6

4

3 回答 3

3

正则表达式应该在这里解决问题:

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    sb.append("Name        : mysql                        Relocations: (not relocatable)\n");
    sb.append("Version     : 5.1.61                            Vendor: CentOS\n");
    sb.append("Release     : 4.el6                         Build Date: Fri 22 Jun 2012 05:58:59 AM PDT\n");
    sb.append("Install Date: Tue 13 Nov 2012 02:23:23 AM PST      Build Host: c6b10.bsys.dev.centos.org\n");
    sb.append("URL         : http://www.mysql.com\n");
    sb.append("Summary     : MySQL client programs and shared libraries\n");

    Pattern p = Pattern.compile("([^\\r\\n:]+):\\s(.+?)(\\s{2,}|\\r\\n|\\r|\\n|$)");
    Matcher m = p.matcher(sb.toString());
    while(m.find()) {
        String key = m.group(1).trim();
        String value = m.group(2);

        System.out.println(key + " = \"" + value + "\"");
    }
}

输出:

Name = "mysql"
Relocations = "(not relocatable)"
Version = "5.1.61"
Vendor = "CentOS"
Release = "4.el6"
Build Date = "Fri 22 Jun 2012 05:58:59 AM PDT"
Install Date = "Tue 13 Nov 2012 02:23:23 AM PST"
Build Host = "c6b10.bsys.dev.centos.org"
URL = "http://www.mysql.com"
Summary = "MySQL client programs and shared libraries"
于 2012-11-23T12:35:45.780 回答
1

试试这个正则表达式作为起点:

([a-zA-Z][a-zA-Z ]*): (.*?)(( {2,})|$)

第一组应捕获键,第二组应捕获值。它假设两件事:

1) 一个值后至少有两个空格或行尾。2)一个值中永远不会有两个空格一个接一个。

(重要的是,这些假设确实正确。在您的示例中它们是正确的,但您需要验证您的输入是否始终正确。)

我根据您上面的示例对其进行了测试,它似乎可以工作,请尝试:http ://regexpal.com/ (您需要在顶部启用复选框“^$ match at line breaks”以使其工作)

如果该正则表达式没问题,请使用PatternMatcher从 Java API 构建您的哈希图。啊,您应该trim()匹配匹配的键和值以消除末尾的额外空格。

于 2012-11-23T12:26:31.343 回答
0

尝试创建一些正则表达式。由于许多项目都定义得很好,您可以使用String.indexOf(). 然后获取substring(), 并开发 hashmap。

于 2012-11-23T12:11:35.430 回答