检查字符串是否存在大量不同的增量值

时间:2013-03-04 17:20:01

标签: java string loops

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

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循环中坚持所有条件,并在那里做所有事情。这一切看起来都很混乱,是否有一种非混乱的方式呢?

3 个答案:

答案 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);
}

然后检查你的布尔值