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

Java 检查字符串中是否存在大量不同的增量值,java,string,loops,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("

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

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(inti=1;i我认为这个正则表达式应该这样做:

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");
String parseCommand = "vlan4094";
if (parseCommand.startsWith("vlan"))
{
   int v = Integer.parseInt(parseCommand.substring(4));
   if (v >= 1 && v <= 4094)
      /* do stuff */
}
[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.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");
String parseCommand = "vlan4094";
if (parseCommand.startsWith("vlan"))
{
   int v = Integer.parseInt(parseCommand.substring(4));
   if (v >= 1 && v <= 4094)
      /* do stuff */
}


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

boolean b = false;

for(int i = 1 ; i < 4094 ; i ++){
    b = b || parseCommand.contains("vlan" + i);
}
boolean b=false;
对于(int i=1;i<4094;i++){
b=b | | parseCommand.contains(“vlan”+i);
}

然后检查布尔值

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

parseCommand = parseCommand.replaceFirst("vlan", "");
然后将其转换为int

int value = Integer.parseInt(parseCommand);
然后将这个结果和你想要的结果进行比较

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

如果((值>=1)和&(值)正则表达式在此处可能有用字符串的格式是什么?是“vlan”的情况吗出现多次,或仅出现一次?@Beau:单是正则表达式无法进行解析,但通过提取它可以帮助很大。也许你可以添加一个你认为它会如何工作的答案?@Tom会出现一次,但可能会出现多次,所以我希望有一种更稳健的方法来处理它。@BeauGrantham I Uspose I can j必须更改我最初必须更改的内容。匹配vlan部分,并保持其余部分不变,这将起作用。在调用
replaceFirst()
之前,您可能必须测试parseCommand.contains(“vlan”)
,否则它也会让您在出现
parseCommand=“10”
(或1-4094之间的任何数字)的情况下进入.TThanks,另一个有趣的答案。确实需要检查其中的一些内容!这似乎是合理的谢谢,回答很好,我可以将vlan部分的原始内容从.contains更改为.matches,其余部分保持不变,这会起作用。我也喜欢这个答案,感谢您以另一种方式考虑它。是的,这是最简单和最简单的我们可以理解这个答案,但它是无效的,正则表达式方法是最好的。