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

唯一の問題が「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 に答える
0

それらを1つのブール値に結合できます

boolean b = false;

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

次に、ブール値を確認します

于 2013-03-04T17:29:08.073 に答える