Как сравнить 2 строки, если в них есть пробелы?

У меня проблема с простой программой, над которой я работаю, мне просто нужно спросить пользователя, хочет ли он обычную цену или цену продажи. И ему нужно ответить строковым значением. Теперь я знаю, что мне просто нужно использовать if (price.equals("sale") == true). Но проблема возникает, если я хочу, чтобы пользователь ввел что-то, в словах которого есть пробелы, например: if (price.equals("regular price") == true), когда пользователь вводит «обычную цену», я не получаю желаемого ответа. Кстати, я тоже изучаю Java.

Используйте replaceAll(" ",""). Также можно просто сделать if (price.equals("Sale"))

GBlodgett 21.10.2018 02:23

Безумная догадка: вы тестируете это, запустив свое приложение в командной строке и сделав что-то вроде myapp regular price?

kinbiko 21.10.2018 02:27

Вы действительно написали код, в котором if (price.equals("regular price") == true) не работает, когда пользователь вводит «обычную цену»? При сравнении пробелов не должно быть ничего плохого, если только пользователь не ввел, скажем, 2 пробела вместо одного. Кстати, == true в вашем тесте не нужен, так как результат логический. if проверяет логические значения напрямую: if (price.equals("regular price")).

lurker 21.10.2018 02:29

вводится в другом регистре (например, в верхнем или нижнем регистре)? если да, вам нужно преобразовать их в соответствующий регистр ..

Bagus Tesa 21.10.2018 02:32

Настоящая проблема здесь в том, чтобы точно определить требования. Какой полный набор входных данных вы хотите поддержать? (А что не хочешь принять?) Например, что с «нормальным»? "стандарт"? "или обычный? Если вы на самом деле не укажете эту деталь в своем вопросе, мы сможем только догадываться, что вам нужно. Если вы не решите, что вам нужно, >> вы << не сможете это реализовать.

Stephen C 21.10.2018 03:22
"когда пользователь вводит" обычная цена ", я не получаю ответа, который хотел" Возможно, это потому, что вы используете scanner.next(), который возвращает только одно слово, даже если пользователь ввел два слова? В таком случае используйте nextLine().
Andreas 21.10.2018 03:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
3 924
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете определить, является ли строка содержит таким словом:

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

Я протестировал следующую программу, и она вернула истину, хотя в строке есть пробелы.

Моя беда, ошибка заключалась в том, что я поставил == в конце, не знал, что мне не нужно проверять, истинно оно или ложно, и это автоматически вернет значение. Спасибо за помощь!

no_va 29.10.2018 20:18

Другие вопросы по теме