目前我正在检查以下字符串:
if(parseCommand.contains("vlan1")
|| parseCommand.contains("Fa0/1i") || parseCommand.contains("Fa0/1o")
|| parseCommand.contains("Fa1/0") || parseCommand.contains("Fa1/1")
|| parseCommand.contains("Fa1/2") || parseCommand.contains("Fa1/3")
|| parseCommand.contains("Fa1/4") || parseCommand.contains("Fa1/5")
|| parseCommand.contains("Fa1/6") || parseCommand.contains("Fa1/7")
|| parseCommand.contains("Fa1/8") || parseCommand.contains("Fa1/9")
|| parseCommand.contains("Fa1/11") || parseCommand.contains("Gi0"))
{
//do things here
}
但是它可能包含vlan1到vlan4094,我必须检查这些。最简单的方法是什么,我是否必须将它全部放在for循环递增到4094我猜?
for (int i = 1; i <= 4094; i++)
{
if(parseCommand.contains("vlan"[i]))
{
//do stuff here
}
}
if(other conditions from above)
{
//do same stuff again here
}
否则我可以在for循环中坚持所有条件,并在那里做所有事情。这一切看起来都很混乱,是否有一种非混乱的方式呢?
答案 0 :(得分:6)
我认为这个正则表达式应该这样做:
String parseCommand = "vlan4094";
if (parseCommand.matches(".*?vlan([1-3][0-9]{3}|" +
"[1-9][0-9]{0,2}|" +
"40(9[0-4]|[0-8][0-9])).*"))
System.out.println("matches");
[1-3][0-9]{3}
- 1000-3999
[1-9][0-9]{0,2}
- 1-999
9[0-4]
- 90-94
[0-8][0-9]
- 00-89
40(9[0-4]|[0-8][0-9])
- 4000-4094
这样的事情可能更简单:
String parseCommand = "vlan4094";
if (parseCommand.startsWith("vlan"))
{
int v = Integer.parseInt(parseCommand.substring(4));
if (v >= 1 && v <= 4094)
/* do stuff */
}
建议更改:
替换:
parseCommand.contains("Fa1/0") || parseCommand.contains("Fa1/1")
|| parseCommand.contains("Fa1/2") || parseCommand.contains("Fa1/3")
|| parseCommand.contains("Fa1/4") || parseCommand.contains("Fa1/5")
|| parseCommand.contains("Fa1/6") || parseCommand.contains("Fa1/7")
|| parseCommand.contains("Fa1/8") || parseCommand.contains("Fa1/9")
与
parseCommand.matches(".*?Fa1/[0-9].*")
答案 1 :(得分:1)
如果唯一的问题是“vlanXXX”,你可以删除字符串的“vlan”部分:
parseCommand = parseCommand.replaceFirst("vlan", "");
然后将其转换为int
int value = Integer.parseInt(parseCommand);
然后将此结果与您想要的结果进行比较
if((value >= 1) && (value <= 4094)){....}
这仅适用于给定的情况,您必须处理无法将parseCommand强制转换为int的情况。它比使用任何常规表达更容易理解
答案 2 :(得分:0)
您可以将它们组合成一个布尔值
boolean b = false;
for(int i = 1 ; i < 4094 ; i ++){
b = b || parseCommand.contains("vlan" + i);
}
然后检查你的布尔值