将特定输出解析为变量Java

时间:2013-05-10 08:07:35

标签: java parsing

我正在尝试找到在c7000 HP机箱上连接和执行命令时如何从jsch解析特定输出的最佳方法。

到目前为止,我所做的是编写一个连接到hp磁盘阵列,执行命令,检索命令输出并将其从流转换为String的程序。

我最终得到了这个字符串

Server Blade #1 Information:
    Type: Server Blade
    Manufacturer: HP
    Product Name: ProLiant BL280c G6
    Part Number: 507865-B21     
    System Board Spare Part Number: 531337-001
    Serial Number: XZ73616G9Z      
    UUID: 38926035-5636-5D43-3330-359274423959
    Server Name: SERVERONE
    Asset Tag: [Unknown]
    ROM Version: I25 02/01/2013

    CPU 1: Intel(R) Xeon(R) CPU E5520 @ 2.27GHz (4 cores)
    CPU 2: Intel(R) Xeon(R) CPU E5520 @ 2.27GHz (4 cores)
    Memory: 49152 MB

现在我需要从该字符串中提取一些信息并将其放入变量/变量中。我试过正则表达式,但似乎并没有破解它。我需要的是最终得到一个字符串变量中的产品名称“Proliant BL280c G6”,我稍后可以使用,与序列号或其他任何信息相同。我不需要的是前面的文本类型:或部件号:。我只需要提取之后的内容。

我是Java的新手,每天都在学习很多,这里的任何人都可以指出我解决问题的最佳方法吗?

编辑:非常感谢您的快速回复。我现在有一些关于如何解决问题的想法。最大的帮助是向我展示如何正确使用正则表达式。我错过了那里有可能排除不需要的字符串件ex。 (小于=产品\ SNAME:?)。

3 个答案:

答案 0 :(得分:2)

String delims = "\n";   //this is the identifier of a line change in java
String[] lines = result.split(delims);  

for (int i=0;i<lines.length;i++)  
{  
        System.out.println(lines[i]);  
}  

此代码将保存(并打印)该String中的行(假设您发布的内容保存为java String)。

你有几种方法可以做到这一点。当然,他们将是更合理的方法(正则表达式,解析器,...),但你可以这样做来检查一个字符串是否包含一个子字符串:

 str1.toLowerCase().contains(str2.toLowerCase())

因此,例如,如果您想知道一行lines[i]是否包含单词产品名称,请填写:

 subS = "Product Name";
 if (lines[x].toLowerCase().contains(subS.toLowerCase())); 
 //x being a number between 0 and the total of lines

如上所述,这是一种非常习惯的方法,但它会起作用。

答案 1 :(得分:0)

您可以使用Asier的方法按换行符('\n')拆分行,然后获取每个可以执行line.substring(line.indexOf(":")+1, line.length())的值的值。您还可以使用line.substring(0, line.indexOf(":"))获取参数的名称。

您可以制作HashMap并按键访问它们:

HashMap<String, String> map = new HashMap<String, String>(); //or new HashMap<>() if you are on Java 7
String str = "your server stuff goes here";
String[] lines = str.split("\n");
for(int i = 0; i < lines.length; i++)
{
  String curline = lines[i];
  int index = curline.indexOf(":");
  map.put(curline.substring(0, index).trim(), curline.substring(index+1, curline.length()).trim());
}

答案 2 :(得分:0)

假设您的回复位于source.txt中,我们会读取文件

File file = new File("source.txt");
BufferedReader fileReader = new BufferedReader(new FileReader(file));

逐行阅读我们将它与regexp匹配,后面是查找:

String line;
String LOOKUP_BEHIND = "(?<=[a-zA-Z0-9 ]:)";
while((line = fileReader.readLine())!= null){
    Matcher matcher1 = Pattern.compile(LOOKUP_BEHIND + ".+").matcher(line);
    if (matcher1.find()){
        System.out.println(matcher1.group(0));
    }
}