У меня проблема с простой программой, над которой я работаю, мне просто нужно спросить пользователя, хочет ли он обычную цену или цену продажи. И ему нужно ответить строковым значением. Теперь я знаю, что мне просто нужно использовать if (price.equals("sale") == true). Но проблема возникает, если я хочу, чтобы пользователь ввел что-то, в словах которого есть пробелы, например: if (price.equals("regular price") == true), когда пользователь вводит «обычную цену», я не получаю желаемого ответа.
Кстати, я тоже изучаю Java.
Безумная догадка: вы тестируете это, запустив свое приложение в командной строке и сделав что-то вроде myapp regular price?
Вы действительно написали код, в котором if (price.equals("regular price") == true) не работает, когда пользователь вводит «обычную цену»? При сравнении пробелов не должно быть ничего плохого, если только пользователь не ввел, скажем, 2 пробела вместо одного. Кстати, == true в вашем тесте не нужен, так как результат логический. if проверяет логические значения напрямую: if (price.equals("regular price")).
вводится в другом регистре (например, в верхнем или нижнем регистре)? если да, вам нужно преобразовать их в соответствующий регистр ..
Настоящая проблема здесь в том, чтобы точно определить требования. Какой полный набор входных данных вы хотите поддержать? (А что не хочешь принять?) Например, что с «нормальным»? "стандарт"? "или обычный? Если вы на самом деле не укажете эту деталь в своем вопросе, мы сможем только догадываться, что вам нужно. Если вы не решите, что вам нужно, >> вы << не сможете это реализовать.
scanner.next(), который возвращает только одно слово, даже если пользователь ввел два слова? В таком случае используйте nextLine().




Вы можете определить, является ли строка содержит таким словом:
if (price.toLowerCase().contains("regular"))
Если вы хотите пофантазировать, вы можете использовать регулярное выражение для поиска целого слова (например, не «нерегулярный»):
if (price.matches("(?i).*\\bregular\\b.*"))
Вы хотите сравнивать строки с пробелами, верно? Затем вы можете сначала сравнить их длину, а затем
Если строка содержит space, разделите ее на него, снова сравните длины, затем проверьте каждую строку.
Если он не содержит места, просто используйте equals один раз, вот что я придумал:
class cmp {
public static void main(String[] args) {
String s = "test some";
String s2 = "test some";
String s3 = "test not";
String s4 = "testxsome";
System.out.println(cmpStr(s,s2)); // True
System.out.println(cmpStr(s,s3)); // False
System.out.println(cmpStr(s,s4)); // False
}
public static boolean cmpStr(String str1, String str2) {
if (str1.length() != str2.length()) {
System.out.println("Length mismatch.");
return false;
}
if (str1.contains(" ") || str2.contains(" ")) {
String[] a1 = str1.split(" ");
String[] a2 = str2.split(" ");
if (a1.length != a2.length) {
System.out.println("Split Length mismatch.");
return false;
}
for (int i = 0; i < a1.length; i++) {
if (!a1[i].equals(a2[i])) {
System.out.println("One of split mismatch." + a1[i] + " " + a2[i] );
return false;
}
}
} else {
if (!str1.equals(str2)) {
System.out.println("Regular equals returns false.");
return false;
}
}
return true;
}
}
Здесь я вижу три метода
Удалите из строки все пробелы и скрытые символы и проверьте
String input = "regular price";
input = input.replaceAll("\\s+","");
if (price.equals(input))
{
//your code here
}
Проверьте, содержит ли слово ключевые слова
if (price.toLowerCase().contains("regular"))
Создайте регулярное выражение, соответствующее вашим словам
Метод / функция java equals () отлично работает и с пробелами. Также не нужно сравнивать результат с истиной / ложью. Если две строки равны, то equals () автоматически вернет true, иначе он вернет false.
public class MyClass {
public static void main(String args[]) {
String a = "A B C";
if (a.equals("A B C")){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
}
Я протестировал следующую программу, и она вернула истину, хотя в строке есть пробелы.
Моя беда, ошибка заключалась в том, что я поставил == в конце, не знал, что мне не нужно проверять, истинно оно или ложно, и это автоматически вернет значение. Спасибо за помощь!
Используйте
replaceAll(" ",""). Также можно просто сделатьif (price.equals("Sale"))