我正在尝试找到在 c7000 HP 机箱上连接和执行命令时解析 jsch 的特定输出的最佳方法。
到目前为止,我所做的是编写一个程序,该程序连接到 HP 机箱、执行命令、检索命令的输出并将其从流转换为字符串。
我最终得到这个字符串
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 还很陌生,每天都在学习很多东西,这里有人能给我指出解决这个问题的最佳方法的正确方向吗?
编辑:非常感谢大家的快速回复。我现在对如何解决这个问题有了一些想法。最大的帮助是向我展示如何正确使用正则表达式。我错过的是排除不需要的弦乐片段的可能性。 (?<=产品名称:)。
最佳答案
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
如上所述,这是一种非常简单的方法,但它会起作用。
关于java - 将特定输出解析为变量 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477718/