目前我正在检查以下字符串:
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
}
Run Code Online (Sandbox Code Playgroud)
但是它可能包含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
}
Run Code Online (Sandbox Code Playgroud)
或者我可以在for循环中坚持所有条件,并在那里做所有事情.这一切看起来都很混乱,是否有一种非混乱的方式呢?
我认为这个正则表达式应该这样做:
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");
Run Code Online (Sandbox Code Playgroud)
[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 */
}
Run Code Online (Sandbox Code Playgroud)
建议的变化:
更换:
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")
Run Code Online (Sandbox Code Playgroud)
同
parseCommand.matches(".*?Fa1/[0-9].*")
Run Code Online (Sandbox Code Playgroud)