74

str可能な値 、および を持つval1文字val2列変数が 1 つありval3ます。

strif ステートメントを使用して、これらすべての値を(等号で) 比較したいと思います。次に例を示します。

if("val1".equalsIgnoreCase(str)||"val2".equalsIgnoreCase(str)||"val3".equalsIgnoreCase(str))
{
      //remaining code
}

複数の OR (||) 演算子の使用を避け、1 つの式で値を比較する方法はありますか? たとえば、次のようにします。

 if(("val1" OR "val2" OR "val3").equalsIgnoreCase(str)   //this is only an idea.
4

18 に答える 18

123

より良い解決策を見つけました。これは RegEx を介して実現できます。

if (str.matches("val1|val2|val3")) {
     // remaining code
}

大文字と小文字を区別しない一致の場合:

if (str.matches("(?i)val1|val2|val3")) {
     // remaining code
}
于 2012-04-18T15:59:09.957 に答える
17

比較するすべての文字列をコレクションに格納しstr、コレクションにが含まれているかどうかを確認できますstrstrコレクションにクエリを実行する前に、コレクション内のすべての文字列を小文字として格納し、小文字に変換します。例えば:

Set<String> strings = new HashSet<String>();
strings.add("val1");
strings.add("val2");

String str = "Val1";

if (strings.contains(str.toLowerCase()))
{
}
于 2012-04-18T08:16:57.823 に答える
5

ArrayUtils役立つ場合があります。

ArrayUtils.contains(new String[]{"1", "2"}, "1")
于 2015-08-27T05:53:02.937 に答える
2

var-args を使用して、独自の静的メソッドを記述します。

public static boolean compareWithMany(String first, String next, String ... rest)
{
    if(first.equalsIgnoreCase(next))
        return true;
    for(int i = 0; i < rest.length; i++)
    {
        if(first.equalsIgnoreCase(rest[i]))
            return true;
    }
    return false;
}

public static void main(String[] args)
{
    final String str = "val1";
    System.out.println(compareWithMany(str, "val1", "val2", "val3"));
}
于 2012-04-18T08:19:43.037 に答える
0

コレクションフレームワークでこれを実現できます。コレクションにすべてのオプションを入れて、次のように言いますCollection<String> options

次に、これをループして文字列をリスト要素と比較し、そうである場合はブール値 true を返し、それ以外の場合は false を返すことができます。

于 2012-04-18T08:21:10.493 に答える
0

とにかくこの質問は再開されたので、enum解決策を提案することもできます.

enum ValidValues {
   VAL1, VAL2, VAL3;

   public static boolean isValid(String input) {
       return Stream.of(ValidValues.values())
                    .map(ValidValues::name)
                    .anyMatch(s -> s.equalsIgnoreCase(input));
   }
}

または、ストリームステートメントを使用することもできます

Stream.of("val1", "val2", "val3")
      .anyMatch(s -> s.equalsIgnoreCase(str))

一箇所だけ使うなら。

于 2020-02-03T09:18:48.517 に答える
-2
!string.matches("a|b|c|d") 

私にとってはうまくいきます。

于 2016-11-10T10:09:01.953 に答える
-3

いいえ、そのような可能性はありません。ただし、次のように想像できます。

public static boolean contains(String s, Collection<String>c) {
    for (String ss : c) {
       if (s.equalsIgnoreCase(ss)) return true;
    }
    return false;
}
于 2012-04-18T08:17:26.283 に答える