4

目前我正在检查以下字符串:

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,我必须检查这些。最简单的方法是什么,我猜我是否必须将它全部放在一个递增到 4094 的 for 循环中?

 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 循环中并在那里做所有事情。这一切看起来都很混乱,有没有一种不混乱的方法呢?

4

3 回答 3

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].*")
于 2013-03-04T17:27:49.400 回答
0

您可以将它们组合成一个布尔值

boolean b = false;

for(int i = 1 ; i < 4094 ; i ++){
    b = b || parseCommand.contains("vlan" + i);
}

然后检查你的布尔值

于 2013-03-04T17:29:08.073 回答
0

如果唯一的问题是“vlanXXX”,您可以删除字符串的“vlan”部分:

parseCommand = parseCommand.replaceFirst("vlan", "");

然后将其转换为 int

int value = Integer.parseInt(parseCommand);

然后将此结果与您想要的结果进行比较

if((value >= 1) && (value <= 4094)){....}

这仅适用于给定的情况,您必须处理无法将 parseCommand 强制转换为 int 的情况。它比使用任何正则表达式更容易理解

于 2013-03-04T17:29:42.167 回答