我正在尝试找到在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:?)。
答案 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));
}
}