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;
}
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;
}
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.
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
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...
}
vous ne pouvez comparer que le mot entier dans l’interrupteur. Pour votre scénario, il est préférable de l’utiliser si
@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