我的消息格式为:
FixedWord1 variable1 FixedWord2 on FixedWord3 variable2/variable3, variable4 = variable5
我只需要从上面的消息中提取变量3。
以下是我的尝试:
String example = "FixedWord1 variable1 FixedWord2 on FixedWord3 variable2/variable3, variable4 = variable5";
我知道FixedWord3的长度是6.所以,
example.substring(example.lastIndexOf("FixedWord3") + 6 , example.lastIndexOf(",")); //To get {variable2}/{variable3}
然后,
String requiredString[] = example.split("/", 2); //requiredString[1] would contain {variable3} even if it contains /
您能为这个问题提出更有效的解决方案吗?
答案 0 :(得分:1)
修改强> 这个正则表达式应该可以解决问题。
Pattern pattern = Pattern.compile(".+(Device).+[/]([A-Z].+)[,][ ].+");
Matcher matcher = pattern.matcher(yourstring);
if(matcher.matches())
System.out.println(matcher.group(2));
做出这项工作的假设:
答案 1 :(得分:1)
因为你知道变量2不能包含" /"你知道FixedWord3的长度那么这个怎么样?
String deviceName = example.substring(example.lastIndexOf("Device") + 6, example.lastIndexOf(","));
String lastPart = deviceName.substring(deviceName.indexOf("/") + 1);
System.out.println(deviceName);
System.out.println(lastPart);
打印:
SJ-ME3600X-185 /接口GigabitEthernet0 / 4
接口GigabitEthernet0 / 4
答案 2 :(得分:-1)
正则表达的帮助。
一种可能的方法是抓住" {variable2}"之后的比赛:
{variable2}\/{([^}]+)}
然后您可以使用Matcher
和Pattern
以及其他工具来使其在Java中运行。
请参阅here以获取解释和现场演示。
答案 3 :(得分:-1)
使用正则表达式模式是从java中的消息中提取单词的有效方法。
String s = "FixedWord1 {variable1} FixedWord2 on FixedWord3 {variable2}/{variable3}, {variable4} = {variable5}";
Pattern p = Pattern.compile("/(\\{([^}]*)\\})");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
输出 {variable3}