2

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

到目前为止,我所做的是编写一个连接到 hp 机箱、执行命令、检索命令输出并将其从流转换为字符串的程序。

我最终得到了这个字符串

服务器刀片 #1 信息:
    类型:刀片服务器
    制造商:惠普
    产品名称:ProLiant BL280c G6
    部件号:507865-B21     
    系统板备件编号:531337-001
    序列号:XZ73616G9Z      
    UUID:38926035-5636-5D43-3330-359274423959
    服务器名称:SERVERONE
    资产标签:[未知]
    ROM 版本:I25 02/01/2013

    CPU 1:Intel(R) Xeon(R) CPU E5520 @ 2.27GHz(4 核)
    CPU 2:Intel(R) Xeon(R) CPU E5520 @ 2.27GHz(4 核)
    内存:49152 MB

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

我对 Java 很陌生,每天都在学习很多东西,这里的任何人都可以为我指出解决这个问题的最佳方法的正确方向吗?

编辑:非常感谢大家的快速回复。我现在对如何解决这个问题有了一些想法。最大的帮助是向我展示了如何正确使用正则表达式。我错过的是排除不需要的字符串片段的可能性。(?<=Product\sName:)。

4

3 回答 3

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]);  
}  

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

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

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

因此,例如,如果您想知道一行是否lines[i]包含单词Product Name,只需执行以下操作:

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

如前所述,这是一种非常朴素的方法,但它会起作用。

于 2013-05-10T08:17:08.080 回答
0

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

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

逐行阅读,我们将其与正则表达式匹配,并在后面进行查找:

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));
    }
}
于 2013-05-10T08:55:23.467 回答
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());
}
于 2013-05-10T08:41:36.773 回答