有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用java进行纯文本解析

我有一个ssh的输出,如下所示。我想用java将下面的输出解析为一个hashmap。任何建议都会有帮助

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


共 (2) 个答案

  1. # 1 楼答案

    正则表达式应该做到以下几点:

    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"
    
  2. # 2 楼答案

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