20

次のコードをswitchステートメントに変換するにはどうすればよいですか?

String x = "user input";

if (x.contains("A")) {
    //condition A;
} else if (x.contains("B")) {
    //condition B;
} else if(x.contains("C")) {
    //condition C;
} else {
    //condition D;
}
4

7 に答える 7

19

方法はありますが、を使用していませんcontains。正規表現が必要です。

final Matcher m = Pattern.compile("[ABCD]").matcher("aoeuaAaoe");
if (m.find())
  switch (m.group().charAt(0)) {
  case 'A': break;
  case 'B': break;
  }
于 2012-07-19T09:53:24.207 に答える
7

switchのような条件ではできませんx.contains()。Java 7はswitch文字列をサポートしていますが、希望どおりではありません。使用if

于 2012-07-19T09:50:15.500 に答える
5

条件の一致は、switchステートメントのJavaでは許可されていません。

ここでできることは、文字列リテラルの列挙型を作成し、その列挙型を使用して、一致した列挙型リテラルを返すヘルパー関数を作成することです返された列挙型の値を使用して、switchcaseを簡単に適用できます

例えば:

public enum Tags{
   A("a"),
   B("b"),
   C("c"),
   D("d");

   private String tag;

   private Tags(String tag)
   {
      this.tag=tag;
   }

   public String getTag(){
      return this.tag;
   }

   public static Tags ifContains(String line){
       for(Tags enumValue:values()){
         if(line.contains(enumValue)){
           return enumValue;
         }
       }
       return null;
   }

}

そして、Javaマッチングクラス内で、次のようなことを行います。

Tags matchedValue=Tags.ifContains("A");
if(matchedValue!=null){
    switch(matchedValue){
       case A:
         break;
       etc...
}
于 2017-08-11T07:15:28.003 に答える
4
@Test
public void test_try() {
    String x = "userInputA"; // -- test for condition A
    String[] keys = {"A", "B", "C", "D"};
    String[] values = {"conditionA", "conditionB", "conditionC", "conditionD"};

    String match = "default";
    for (int i = 0; i < keys.length; i++) {
        if (x.contains(keys[i])) {
            match = values[i];
            break;
        }
    }

    switch (match) {
        case "conditionA":
            System.out.println("some code for A");
            break;
        case "conditionB":
            System.out.println("some code for B");
            break;
        case "conditionC":
            System.out.println("some code for C");
            break;
        case "conditionD":
            System.out.println("some code for D");
            break;
        default:
            System.out.println("some code for default");
    }
}

出力:

some code for A
于 2017-07-27T05:29:01.497 に答える
3

switchいいえ、 with条件は使用できません

JAVA 7ではStringswitch case

文字列をオンにできないのはなぜですか?

ただし、条件はスイッチでは使用できません

于 2012-07-19T09:53:27.120 に答える
2

スイッチで単語全体を比較することしかできません。あなたのシナリオでは、次の場合に使用することをお勧めします

于 2012-07-19T09:53:21.733 に答える
1

また、HashMap:

String SomeString = "gtgtdddgtgtg";

Map<String, Integer> items = new HashMap<>();
items.put("aaa", 0);
items.put("bbb", 1);
items.put("ccc", 2);
items.put("ddd", 2);

for (Map.Entry<String, Integer> item : items.entrySet()) {
    if (SomeString.contains(item.getKey())) {
        switch (item.getValue()) {
            case 0:
                System.out.println("do aaa");
                break;
            case 1:
                System.out.println("do bbb");
                break;
            case 2:
                System.out.println("do ccc&ddd");
                break;
        }
        break;
    }
}
于 2020-07-23T16:27:29.453 に答える