Содержание

java — Как сравнить две строки, допуская различие в n букв?

Например есть две строки

«Манчестер Юн.-Барнли» и «Манчестер Юнайтед Бернли»

«Сток Сити-Суонси» и «Сток Суонси»

Как (с помощью Regex) определить, что это одно и то же? Трудность еще в том, что во второй строке нет разделяющего «-«.

  • java
  • регулярные-выражения
10

Для примеров в вопросе достаточно проверить, что для каждого слова в одной строке есть слово из другой строки, которое с него начинается. Если все ситуации именно такие, то можно собрать решение «на коленке» без сторонних библиотек.

Чтобы разбить строки на массивы из слов, можно:

  1. заменить всё, что не буквы, на пробелы
  2. сократить повторяющиеся пробелы
  3. проверить, что получившиеся строки не пустые (иначе задача снимается)
  4. перевести строки в нижний регистр
  5. разбить по пробелам на массивы из слов

Затем сравнить слова попарно, и если все слова одной строки поглотились словами из другой, то всё ок.

В PHP можно найти позицию первого вхождения подстроки и сравнить её с нулём. Про джаву не знаю, но, думаю, тоже можно подобрать удобную штатную функцию.

Регексом вряд ли можно добится нужного тебе эфекта. Как и другими встроенными методами.

Тебе нужна либа для Text comparation. Попробуй погуглить по «Sequence Comparison Algorithm» или «Text comparison algorithm».

Вот здесь должен лежать нужный тебе алгоритм, в том числе и на джава-реализации: https://github.com/cubicdaiya/onp

1

Точно есть готовые либы для javaдля нечеткого поиска. https://github.com/iamsimakov/Kursovoi/blob/master/src/main/java/com/simakov_alexey/kursovoi/TaskSortingExpressions.java

Там используется библиотека от апач.

1

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Сравнение двух строк в Java.

Обзор. В режиме реального времени возникают различные ситуации, когда нам нужно сравнить два объекта String. Таким образом, в Java предусмотрено несколько способов сравнения объектов String, таких как:

  • Метод String.equals()
  • Метод String.equalsIgnoreCase()
  • Метод Object.equals()
  • Метод String.compareTo()
  • Метод String.regionMatches()

Область применения

Цель статьи:

  • Проиллюстрировать различные методы сравнения двух объектов String:
    • Метод String.equals()
    • Метод String.equalsIgnoreCase()
    • Метод Object.equals()
    • Метод String.compareTo()
    • Метод String.regionMatches()
  • Объясните, почему не использовать «==» в Java для сравнения объектов String.

Почему бы не использовать == для сравнения строк?

В Java рекомендуется использовать методы вместо оператора == для сравнения двух строк.

Это связано с тем, что оператор == проверяет, принадлежат ли два объекта одной и той же ячейке памяти или нет. С другой стороны, методы сравнивают строки, представленные этими объектами String.

Пример:

Вывод:

Объяснение:

  • метод равных().
  • Поскольку обе строки имеют разные ячейки памяти, оператор ‘==’ возвращает false, а метод equals() возвращает true, так как обе строки имеют одинаковые значения.

Как сравнить две строки в Java?

Ниже описано шесть способов сравнения двух объектов String:

Использование пользовательской функции для сравнения двух строк в Java

Мы можем определить собственный метод для сравнения двух объектов String следующим образом:

  • Метод принимает два объекта String в качестве аргументов и проходит через каждый элемент обоих строковых объектов, чтобы оценить равенство между ними.
  • Функция ищет и пытается найти несовпадающее значение между двумя строками. Функция возвращает положительные или отрицательные целые значения в соответствии с разницей между первым несовпадающим символом в обеих строках, если строки не равны, иначе ноль.

Пример:

Вывод:

Объяснение:

  1. Пользовательская функция:

    • Создана пользовательская функция, которая принимает в качестве параметров два объекта String. Вычисляется минимальная длина обеих строк, и цикл выполняется до минимальной длины.
    • Строковые объекты обходят с помощью цикла. Для каждого индекса вычисляются и сравниваются значения ASCII символов обеих строк.
    • При обнаружении любого несовпадающего символа функция возвращает разницу их значений ASCII.
    • Если нет несовпадающего символа, то есть два условия: является ли одна строка подмножеством другой или обе строки равны.
  2. Основная функция: В основной функции 4 строки сравниваются друг с другом следующими способами:

    • При передаче в функцию строковых объектов s1 и s4. Функция возвращает ноль, что означает, что обе строки равны.
    • При передаче s1 и s3 несовпадающими значениями являются «S» и «s», встречающиеся с индексом 0, и поэтому функция возвращает -32, что является разницей между значениями ascii «S» и «s».
    • При передаче s3 и s1 несопоставленными значениями являются «s» и «S», встречающиеся с индексом 0, и поэтому функция возвращает 32.
    • При передаче s1 и s2 все значения совпадают, но длины строк не равны. Поэтому функция возвращает -6.

Наблюдение:

  • Если первая строка на больше , чем вторая строка , возвращается положительный результат.
  • Если первая строка на меньше , чем вторая строка , возвращается отрицательный результат.

Использование String.equals() для сравнения двух строк в Java

В Java метод String.equals() сравнивает две строки на основе последовательности символов, присутствующих в обеих строках. Метод вызывается с использованием двух строк и возвращает логическое значение. Если все символы обеих строк равны, метод возвращает true, иначе возвращается false.

Пример:

Вывод:

Объяснение:

  • В приведенном выше коде 4 строковых объекта создаются, инициализируются и затем передаются методам equals() в следующим образом:
  • Когда строковые объекты s1 и s4 передаются методу equals(), он возвращает true, что означает, что обе строки равны.
  • Когда затем передаются s1 и s3, возвращается false, что означает, что обе строки не равны. Первый символ в обеих строках «S» и «T» не одинаков, и, следовательно, обе строки не равны.
  • Когда затем передаются s1 и s2, возвращается false, что означает, что обе строки не равны. s1 является подмножеством s2 и, следовательно, не равны.

Использование String.equalsIgnoreCase() для сравнения двух строк в Java

В Java метод String.equalsIgnoreCase() сравнивает две строки на основе последовательности символов без учета их регистра (нижний или верхний), присутствующих в обоих струны. Он вызывается с использованием двух строк и возвращает логическое значение. Если все символы обеих строк равны, игнорируя их случаи, метод возвращает true, иначе возвращается false.

Пример:

Вывод:

Объяснение:

  • В приведенном выше коде 6 строковых объектов создаются, инициализируются и затем передаются в equalsIgnoreC ase() следующим образом:
  • Когда строковые объекты s1 и s4 передаются методу equalsIgnoreCase(), он возвращает true, что означает, что обе строки равны независимо от их регистра. Однако оба они имеют одинаковый регистр и набор символов.
  • Когда затем передаются s1 и s3, возвращается true, что означает, что обе строки равны независимо от их регистра. Здесь обе строки имеют разные регистры.
  • Когда затем передаются s1 и s2, возвращается false, что означает, что обе строки не равны независимо от их регистра. s1 является подмножеством s2 и, следовательно, они не равны.
  • Когда затем передаются s1 и s5, возвращается false, что означает, что обе строки не равны независимо от их регистра. s1 и s5 — очень разные строки и, следовательно, не равны.
  • Когда затем передаются s1 и s6, возвращается false, что означает, что обе строки не равны независимо от их регистра. s1 и s6 имеют разный набор символов, а также находятся в разных регистрах и, следовательно, не равны.

Использование Objects.equals() для сравнения двух строк в Java

  • В Java метод Objects.equals() сравнивает два объекта на основе элементов, присутствующих в обоих объектах.
  • Он принимает два объекта в качестве параметров и возвращает логическое значение. Если все элементы обоих объектов равны, метод возвращает true, иначе возвращается false.
  • Если оба объекта пусты, возвращается значение true. Если только один из них равен нулю, возвращается false.

Пример:

Вывод:

Объяснение:

  • В приведенном выше коде 6 строковых объектов создаются, инициализируются и затем передаются в Objects. equals() следующим образом:
  • Когда строковые объекты s1 и s4 передаются методу Objects.equals(), он возвращает true, что означает, что обе строки равны.
  • Когда затем передаются s1 и s3, возвращается false, что означает, что обе строки не равны. Первый символ в обеих строках «S» и «T» не одинаков, и, следовательно, обе строки не равны.
  • Когда затем передаются s1 и s2, возвращается false, что означает, что обе строки не равны. s1 является подмножеством s2 и, следовательно, они не равны.
  • Когда затем передаются s1 и s5, возвращается false, что означает, что обе строки не равны. Здесь только одна из строк имеет значение null. s5 инициализируется как нуль, а s1 не равен нулю.
  • Когда затем передаются s5 и s6, возвращается true, что означает, что обе строки равны. Когда оба аргумента равны нулю, возвращается значение true.

Использование String.compareTo() для сравнения двух строк в Java

В Java метод String.compareTo() сравнивает две строки на основе последовательности символов, присутствующих в обеих строках. Он вызывается с использованием двух строк и возвращает целочисленное значение. Он возвращает три типа целочисленных значений:

  • Ноль(0) : Если обе строки равны, метод возвращает ноль.

Если переданные в качестве аргументов строковые объекты не равны , то возникают следующие случаи:

  • Если одна из строк является префиксом другой, возвращается разница между длинами первого и второго аргументов.
  • В противном случае возвращается разница между значениями ascii первых несовпадающих символов.

Примечание:

Значения ASCII представляют собой 7-битные стандарты кодирования символов, используемые в устройствах электронной связи, которые состоят из 128 символов.

Пример:

Вывод:

Объяснение:

В коде 4 строки объявляются, инициализируются и затем передаются в методы compareTo() следующим образом: 90 009

  • Когда строка объекты s1 и s4 передаются в метод compareTo(). Метод возвращает ноль, что означает, что обе строки равны.
  • При передаче s1 и s3 несопоставленными значениями являются «S» и «s», встречающиеся с индексом 0, поэтому метод возвращает -32.
  • При передаче s3 и s1 несопоставленными значениями являются «s» и «S», встречающиеся с индексом 0, поэтому метод возвращает 32.
  • При передаче s1 и s2 все значения совпадают, но длины строк не равны, и метод возвращает -6 ( разница между длинами Scaler и ScalerTopics).

Использование String.regionMatches() для сравнения двух строк в Java

  • В Java класс String содержит метод regionMatches(), который используется для проверки равенства между двумя строками или подстроками путем сопоставления их соответствующего набора символов.
  • Метод используется в двух форматах: один с учетом регистра, а другой — без учета регистра. Он принимает 5 параметров и возвращает логическое значение.

5 параметров, используемых методом:

  • ignoreCase : Если значение атрибута ignoreCase передано как true, тогда будет использоваться нечувствительная к регистру форма метода regionMatches().
  • tooffset : Представляет индекс, с которого начнется сравнение строки.
  • другое : Другая строка, с которой необходимо сравнить, отображается атрибутом.
  • ooffset : Берется индекс, с которого начнется сравнение в другой строке.
  • len : Указывает на количество символов, необходимое для сопоставления.

Метод regionMatches() возвращает логические значения в соответствии со следующими условиями:

  • Если ignoreCase имеет значение True : метод возвращает:
    • true : Если обе строки равны независимо от их регистра.
    • false : Если обе строки не равны, независимо от их регистра.
  • Если ignoreCase имеет значение False : метод вернет:
    • true : если обе строки равны и имеют одинаковый регистр.
    • false : Если обе строки равны, но имеют разные регистры или обе строки имеют разные символы независимо от регистра.

Пример:

Вывод:

Объяснение:

В приведенном выше коде 6 строковых объектов создаются, инициализируются и затем передаются в методы regionMatches() следующим образом:

  • Когда строковые объекты s1 и s4 передаются методу regionMatches(), если
    • ignoreCase имеет значение false, возвращает значение true.
    • ignoreCase имеет значение true, возвращает значение true. Оба они имеют одинаковый регистр и набор символов.
  • Когда s1 и s3 передаются в метод if
    • ignoreCase имеет значение false, возвращает значение false.
    • ignoreCase имеет значение true, возвращает значение true. Обе строки имеют разные регистры, но одинаковый набор символов.
  • Когда s1 и s2 передаются в метод if
    • ignoreCase имеет значение false, возвращает значение false.
    • ignoreCase имеет значение true, возвращает false. s1 является подмножеством s2 и, следовательно, не равны.
  • Когда s1 и s5 передаются в метод if
    • ignoreCase имеет значение false, возвращает значение false.
    • ignoreCase имеет значение true, возвращает false. s1 и s5 — очень разные строки и, следовательно, не равны.
  • Когда s1 и s6 передаются в метод с
    • ignoreCase имеет значение false, возвращает значение false.
    • ignoreCase имеет значение true, возвращает false. s1 и s6 имеют разный набор символов, а также находятся в разных регистрах и, следовательно, не равны.

Заключение

  • В Java существуют различные способы сравнения двух строковых объектов. Пользовательская функция описывает правильный код для сравнения двух строк.
  • Методы String.equals(), Objects.equals() и compareTo() используются для сравнения строк с учетом регистра.
  • Метод equalsIgnoreCase() используется для сравнения строк без учета регистра.
  • Метод
  • regionMatches() используется для сравнений с учетом и без учета регистра.

как сравнить две строки в java — LALA WE

31 секунда

  • 1 как сравнить две строки в Java
    • 1.1 Как я могу сравнить строки в Java? – Stack Overflow
    • 1.2 Сравнение двух строк в Java – GeeksforGeeks
    • 1.3 Сравнение строк в Java | java — Baeldung
    • 1. 4 Сравнение строк в Java
    • 1.8 Сравнение строк в Java Пошаговое руководство | Карьерная карма
    • 1.9 Сравнение строк и частей строк (Java …
    • 1.10 Нахождение разницы между двумя строками в Java | Baeldung
    • 1.11 Как сравнить две строки в Java (11 методов) — Guru99
    9001 2

    Как я могу сравнивать строки в Java?

    См. Пул строк в Java. Когда вы проверяете (сравниваете) два объекта с помощью оператора ==, он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые ссылки на адреса, он возвращает true, в противном случае — false. Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals.

    Сравнение двух строк в Java — GeeksforGeeks

    www.geeksforgeeks.org › сравнение двух строк в javaСравните две строки в Java – GeeksforGeeks www.geeksforgeeks.org › сравнение двух строк в java Кэширование с помощью определяемой пользователем функции Определите функцию для сравнения значений со следующими условиями, если (string1 > string2) возвращает положительное значение. если обе строки лексикографически равны. Использование String.equals() В Java метод string equals() сравнивает две заданные строки на основе данных/содержимого строки. Если все содержимое обеих строк равно, вернуть true. Использование String.equalsIgnoreCase() Метод String.equalsIgnoreCase() сравнивает две строки на предмет того, чувствительна ли строка к регистру. Этот метод возвращает true, если аргумент не равен нулю, а содержимое обеих строк одинаковое, без учета регистра, в противном случае — false. Использование метода Objects.equals() Object.equals(Object a Object b) возвращает true, если аргументы равны друг другу, и false в противном случае. Следовательно, если оба аргумента равны нулю, возвращается значение true, а если ровно один аргумент равен нулю, возвращается значение false.

    Сравнение строк в Java | Баелдунг

    Метод compareTo() возвращает значение типа int и сравнивает две строки посимвольно лексикографически в соответствии со словарем или естественным порядком. Этот метод возвращает 0, если две строки равны, отрицательное число, если первая строка идет перед аргументом, и число больше нуля, если первая строка идет после аргумента…

    Сравнение строк в Java — javatpoint

    Сравнение строк Java 1) Использование метода equals() Метод equals() класса String сравнивает исходное содержимое строки. Сравните… 2) Использование оператора == Оператор == сравнивает ссылки, а не значения. Класс Teststringcomparison3.java… 3) Сравнение строк методом compareTo().

    Метод Java String compareTo() — W3Schools

    Метод compareTo() лексикографически сравнивает две строки. Сравнение основано на значении Unicode каждого символа в строках. Метод возвращает 0, если строка равна другой строке. Значение меньше 0 возвращается, если строка меньше другой строки (меньше символов), и значение больше 0, если строка …

    Как сравнивать строки в Java — W3docs

    Сравнение строк с классом объекта. Вспомогательный класс Objects содержит метод equals(). В равной степени полезно сравнить две строки. Этот метод сначала сравнивает две строки на основе их адреса и возвращает true, если они равны. Если оба аргумента равны нулю, он возвращает значение true, но если любой из аргументов равен нулю, он возвращает значение false.

    java — Найдите разницу между двумя строками –

    31 Предположим, у меня есть две длинные строки. Они почти одинаковы. Строка a = это пример Строка b = это пример Приведенный выше код приведен только для примера. Фактические строки довольно длинные. Проблема в том, что в одной строке на 2 символа больше, чем в другой. Как я могу проверить, что это за два символа? Сравнение строк Java Поделиться Подписаться

    Java Compare Strings Пошаговое руководство | Карьерная карма

    В Java есть три способа сравнения строк. Метод equals() в Java сравнивает два строковых объекта, оператор равенства == сравнивает две строки, а метод compareTo() возвращает числовую разницу между двумя строками. Сравнение строк — важная часть работы со строками в Java.