Подтвердить что ты не робот

Java string.contains в инструкции switch

Как преобразовать следующий код в оператор 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;
}
4b9b3361

Ответ 1

Существует способ, но не используется contains. Вам нужно регулярное выражение.

final Matcher m = Pattern.compile("[ABCD]").matcher("aoeuaAaoe");
if (m.find())
  switch (m.group().charAt(0)) {
  case 'A': break;
  case 'B': break;
  }

Ответ 2

Вы не можете switch в таких условиях, как x.contains(). Java 7 поддерживает switch в строках, но не так, как вы этого хотите. Используйте if и т.д.

Ответ 3

Нет, вы не можете использовать switch с условиями

JAVA 7 позволяет использовать String с switch case

Почему я не могу включить String?

Но условия не могут использоваться с коммутатором

Ответ 4

вы можете сравнить только слово в переключателе. Для вашего сценария лучше использовать, если

Ответ 5

@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

Ответ 6

Согласование условий не разрешено в java в операторах switch.

Что вы можете здесь сделать, это создать перечисление ваших строковых литералов, а с помощью этого перечисления создать вспомогательную функцию, которая возвращает согласованный литерал перечисления. Используя это значение возвращаемого перечисления, вы можете легко применить case switch.

Например:

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...
}