web-dev-qa-db-fra.com

java string.contains dans l'instruction switch

Comment puis-je convertir le code suivant pour changer d'instruction?

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;
}
13
Kiddo

Il existe un moyen, mais pas d'utiliser contains. Vous avez besoin d'une regex.

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

Vous ne pouvez pas switch à des conditions telles que x.contains(). Java 7 prend en charge switch sur les chaînes mais pas comme vous le souhaitez. Utilisez if etc.

7
user647772

Non, vous ne pouvez pas utiliser la switch avec des conditions

Java 7 permet à String d’être utilisé avec switch case

Pourquoi je ne peux pas allumer une chaîne?

Mais les conditions ne peuvent pas être utilisées avec switch

2
Sangeet Menon

La correspondance de conditions n'est pas autorisée en Java dans les instructions switch.

Ce que vous pouvez faire ici est de créer un enum de vos littéraux de chaîne, et en utilisant cette énumération de créer une fonction helper qui renvoie le littéral d’énum correspondant. En utilisant cette valeur d’énum renvoyée, vous pouvez facilement appliquer switch case .

Par exemple:

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

}

Et dans votre classe de correspondance Java, effectuez les opérations suivantes:

Tags matchedValue=Tags.ifContains("A");
if(matchedValue!=null){
    switch(matchedValue){
       case A:
         break;
       etc...
}
2
Anurag Upadhyaya

vous ne pouvez comparer que le mot entier dans l’interrupteur. Pour votre scénario, il est préférable de l’utiliser si

1
SMK
@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");
    }
}

Sortie: 

some code for A
0
Jatin Singla