Вопрос:
Как проверить, не соответствует ли строка string1 OR string2 ИЛИ string3? Я пытался использовать ||, но это не работает:
if (!answer1.equals(«s1» || «s2» || «s3»)){ System.out.println(«…»); } Лучший ответ:
Самое простое – это “нормальный” способ:
if (!(answer1.equals(«s1») || answer1.equals(«s2») || answer1.equals(«s3»))) { }
Некоторые альтернативные подходы включают строковый переключатель на JDK7+:
switch (answer1) { case «s1»: case «s2»: case «s3»: break; default: // whatever }
…или:
if (!Arrays.asList(«s1», «s2», «s3»).contains(answer1)) { } Ответ №1
Предварительно создайте Set<String> содержащий «s1», «s2» т.д., А затем используйте !set.contains(answer1).
Ответ №2
Вы не хотите, чтобы answer1 был «s1», «s2» или «s3», поэтому вам нужно и сравнения:
if (!answer1.equals(«s1») && !answer1.equals(«s2») && !answer1.equals(«s13»)) { System.out.println(«…»); }
Вы также можете попробовать
List<String> strings = Arrays.asList(«s1», «s2», «s3»); if (!strings.contains(answer1)) { System.out.println(«…»); } Ответ №3if ( !( «s1».equals(answer1) || «s2».equals(answer1) || «s3».equals(answer1))) { // … whatever } Ответ №4
Как написано, вы пытаетесь сделать OR на двух строках. Например, позвольте мне задать вам вопрос: “s1” или “s2”? Ответ: Кто знает? В чем вопрос, о котором даже говорят? Позвольте мне попробовать еще раз: равна ли это “s1”? (Нет). Он равен “s2”? (Нет). Он равен “s3”? (Да.) И т.д. Таким образом:
if(!(answer1.equals(«s1») || answer1.equals(«s2») || answer.equals(«s3»)) ) { … }
Попытка сделать OR на строках просто недействительна; вы должны сделать это в той или иной форме.
Ответ №5
Вот простая альтернатива:
if (!»s1,s2,s3″.contains(answer1))
Предполагает, что ваш ответ не содержит запятой, и даже тогда ему нужно будет иметь кромку, чтобы дать ложный результат.