Разное

Сравнить строки java: Как сравнить строки в Java? Сравниваем строки в Java

Строки. Часть 5 – сравнение строк.

Еще раз напомню, что в Java, все кроме примитивных типов являются ссылочными типами. Сравнение строк рассмотрим на уже более или менее знакомом нам примере когда мы рассматривали создание строк класса String.

Следует обратить особое внимание на сравнение строк s4 и s5, хотя их содержимое равно, но при сравнении s4==s5 мы получим false, так как это разные объекты и при использовании оператора сравнения (==) для строк, равно как и для любых других объектов, происходит сравнение ссылок, а данном случае они разные. Поэтому при сравнении объектов оператором == можно получить граблями по морде неожиданный эффект 🙂

Если же для сравнения использовать метод equals() класса String, то происходит сравнение содержимого объектов (строк). Так же надо учитывать что метод сравнения строк equals() регистро-зависимый, то есть строки «Hello» и «HELLO» для него будут разными.

Данная программа генерирует следующий вывод:

Для того чтобы сравнивать строки не зависимо от  регистра символов существует метод equalsIgnoreCase().

Для сравнения строк существуют еще методы compareTo(String str)  и compareToIgnoreCase(String str). Данные методы сравнивают лексическое значение строки со строкой заданной в параметре str, определяя сортируются ли она в алфавитном порядке раньше или позже строки в параметре str. Методы возвращают целое число типа int, которое может быть меньше, равно или больше нуля. Данное число определяется по следующим правилам:

  1. Сравниваются символы данной строки this и строки str с одинаковым индексом (т.е. посимвольное сравнение строк), пока не встретятся различные символы с индексом, допустим, k или пока одна из строк не закончится.
  2. В первом случае возвращается значение this. charAt(k) — str.charAt(k) , т. е. разность кодировок Unicode первых несовпадающих символов.
  3. Во втором случае возвращается значение this.length() — str.length() , т. е. разность длин строк.
  4. Если строки совпадают, возвращается 0, т.е. в той же ситуации, в которой метод equals() возвращает true.
  5. Если значение str равно null, возникает исключительная ситуация.

Сравнение символов происходит строго по их расположению в таблице кодировки стандарта Unicode, то есть эти методы не учитывают алфавитное расположение символов в локальной кодировке.

Русские буквы расположены в Unicode по алфавиту, за исключением одной буквы. Заглавная буква Ё находится перед всеми кириллическими буквами, ее код ‘ \u0401’ , а строчная буква ё — после всех русских букв, ее код ‘\u0451’ .

Если вас такое расположение не устраивает, задайте свое размещение букв с помощью класса RuleBasedCollator из пакета java.text.

Теперь небольшой пример:

Вывод этой программы следующий:

В первом случае –3 получилось поскольку код символа а равен 97, а код символа d равен 100, 97-100=-3. После этого мы просто сравнили одинаковые строки и поэтому результат равен нулю. Затем случай противоположный первому 100-97=3. И последний случай это когда вычлась длина строки abc0 из длины строки abc, что равно –1.

 

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

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

Узнайте больше о сравнении строк в Java с помощью оператора равно (=).

В этой статье вы узнаете, как сравнивать строки и проблемы, возникающие при сравнении строк с помощью  оператора equals to ( =).

Вам также могут понравиться: Что нужно делать, а чего нельзя делать в строках Java

Вступление

Это  String специальный класс в Java. Мы регулярно используем String в программах на Java, поэтому сравнение двух строк является обычной практикой в ​​Java. В этой статье я попытался ответить на самые распространенные вопросы о строке, например: «Как сравнить строки в Java?»

Сравнение строк очень полезно во время таких процессов, как аутентификация, сортировка, сопоставление ссылок и т. Д.

Я перечислил три разных способа сравнения строк в Java.

  1. Использование 

    equals() метода (сравнение контента)

  2. Использование  == оператора (сравнение ссылки на объект)

  3. Использование  compareTo() метода (сравнение лексикографически строк)

1. Сравните строки, используя

Equals() метод

Таким образом, я использую  .equals() метод экземпляра класса String. Первоначально  .equals() метод является методом  Object класса, класс String переопределяет его.

equals() Метод сравнения двух строк на равенство значений, являются ли они логически равными.

equals() Метод в классе String принимает в качестве параметра другую строку и сравнивает ее с указанной строкой. Он возвращает  true если — и только если — строка параметра не равна нулю и содержит те же символы, что и указанная строка.

Я попросил программу сравнить строки, используя  equals() метод ниже:

Вывод:

2. Сравните строки с помощью 

== оператора

В String  == оператор используется для сравнения ссылок на заданные строки в зависимости от того, ссылаются ли они на одни и те же объекты.

Когда вы сравниваете две строки с помощью  == оператора, он возвращает,  true если строковые переменные указывают на один и тот же объект Java. В противном случае он вернется  false.

Я дал программу на Java для сравнения, используя  == оператор ниже:

Вывод:

Проблемы с использованием 

== оператора для сравнения строк

Большинство начинающих Java-разработчиков допускают эту ошибку, сравнивая две строки с помощью ==оператора.

Логически, они должны проверить, содержит ли обе строки одну и ту же последовательность символов или нет.

В Java Strings  == оператор используется для проверки ссылки как на строковые объекты, так и на  equals() метод, используемый для проверки равенства значений обеих строк.

== — проверяет равенство ссылок

equals() — проверяет равенство значений

Когда мы присваиваем строковое значение строковой переменной, JVM проверит, присутствует ли строка с таким же значением в пуле строк или нет. Если его нет в пуле строк, он будет добавлен в пул констант и будет возвращена ссылка на этот строковый объект.

Если он присутствует в пуле строк, возвращается ссылка на адрес памяти этого строкового объекта.

На следующем рисунке показано наглядное объяснение того же.

Выше « firstString» указывает на строку «coderolls» в пуле строк.

Если мы присваиваем равное значение другой строковой переменной, JVM проверяет, присутствует ли строка с этим значением в пуле строковых констант.

Поскольку строковый объект с этим значением уже создан на предыдущем шаге, другая строковая переменная начинает ссылаться на ранее созданный экземпляр строкового объекта.

На следующем рисунке показано графическое объяснение для ‘ firstString

‘ и ‘ secondString‘, указывающих на строку «coderolls» в пуле строк.


Когда мы создаем строку с помощью 
new оператора, новый строковый объект создается и сохраняется в пространстве кучи Java.

Выше мы можем видеть «
firstString» и «
secondString», указывающие на coderollsстроку «
» в пуле строк, и «
thirdString», указывающие на «
coderolls» в пространстве кучи Java.

Возвращает отрицательное целое число, если строка аргумента лексикографически больше указанной строки, т.е. если строка аргумента следует за указанной строкой. (аргумент String> указанная строка)

Возвращает положительное целое число, если строка аргумента лексикографически меньше указанной строки, т. е. если строка аргумента предшествует указанной строке. (аргумент String <указанная строка)

Возвращает ноль, если обе строки лексикографически равны. (аргумент String = указанная строка)

Если вы хотите игнорировать оба случая compareToIgnoreCase() метода использования строки  .

Я дал программу для сравнения строк с использованием  compareTo() метода. Он также состоит из случая игнорирования случаев с  compareToIgnoreCase() методом.

Вывод:

Я написал подробную статью о  том, как сравнивать строки лексикографически в Java,  если вы хотите узнать больше.

Заключение

Мы можем сравнить строки, используя способы, приведенные ниже:

  1. Используя  equals() метод: 
    equals()
     метод в строках, используемый для проверки равенства строковых значений, содержат ли они одинаковую последовательность символов.
  2. Используя  == operator:  == operator используется для проверки ссылочного равенства двух строк, указывают ли они на один и тот же строковый объект.
  3. Используя  compareTo() метод:  compareTo() метод, используемый для проверки строк лексикографически, то есть в алфавитном порядке. Проверьте подробные статьи о  том, как сравнивать строки лексикографически .

Большинство начинающих Java-разработчиков допускают ошибки при сравнении строк. Они хотят проверить содержимое строки, но они используют  == оператор, чтобы проверить это.

Всегда рекомендуется использовать equals()метод для сравнения строки на основе ее содержимого.

Если у вас есть какие-либо вопросы о приведенных выше блоках кода, пожалуйста, запишите их в разделе комментариев ниже. Кроме того, дайте мне знать, если у вас есть какой-либо другой способ сравнить две строки в Java в разделе комментариев.

Эта статья первоначально опубликована на coderolls.com/compare-strings-in-java .

Дальнейшее чтение

Что нужно и чего не нужно в Java-строках

Учебники по Java-строкам: виртуозность Java-строк

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

Нравится (14)

Твитнуть

188,98К Представления

Узнайте больше о сравнении строк в Java с помощью оператора равенства (=).

В этой статье вы узнаете, как сравнивать строки и какие проблемы возникают при сравнении строк с помощью  равно  ( = ) оператора.

Вам также может понравиться: Что можно и чего нельзя делать со строками Java

Введение

String — это специальный класс в Java. Мы регулярно используем String в программах на Java, поэтому сравнение двух строк является обычной практикой в ​​Java. В этой статье я попытался ответить на самые распространенные вопросы о строке, например: «Как мне сравнивать строки в Java?»

Сравнение строк очень полезно во время таких процессов, как аутентификация, сортировка, сопоставление ссылок и т. д.

Я перечислил три различных способа сравнения строк в Java.

  1. Использование метода equals() (сравнение содержимого)

  2. Использование оператора == (сравнение ссылки на объект)

  3. Использование метода compareTo() (лексикографическое сравнение строк)

1. Сравните строки с помощью

Equals()  Метода

Таким образом, я использую  . equals()  экземплярный метод класса String. Первоначально метод .equals() является методом класса Object , класс String переопределяет его.

equals()   метод сравнивает две строки на равенство значений, независимо от того, равны ли они логически.

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

Я попросил программу сравнивать строки с использованием метода Equals () ниже:

Выход:


2. Сравните струны с использованием

== Оператор

в строке, == Оператор     используется для сравнения ссылок заданных строк в зависимости от того, относятся ли они к одним и тем же объектам.

При сравнении двух строк с помощью оператора == возвращается true  , если строковые переменные указывают на один и тот же объект Java. В противном случае возвращается false .

Я дал Java-программу для сравнения с использованием оператора == ниже:

Вывод:


сравнение двух строк с помощью оператора

== .

По логике, они должны проверить, содержит ли обе строки одинаковую последовательность символов или нет.

В Java Strings оператор == используется для проверки ссылки обоих строковых объектов, а метод equals() используется для проверки равенства значений обеих строк.

==  – проверяет равенство ссылок

equals()  – проверяет равенство значений

пул строк или нет. Если его нет в пуле строк, он будет добавлен в пул констант, и будет возвращена ссылка на этот строковый объект.

Если он присутствует в пуле строк, возвращается ссылка на адрес памяти этого строкового объекта.

На следующем изображении показано его пояснение.

Выше у нас есть « firstString », указывающая на строку «coderolls» в пуле строк.

Если мы присваиваем равное значение другой строковой переменной, JVM проверяет, присутствует ли строка с этим значением в пуле строковых констант или нет.

Поскольку строковый объект с этим значением уже создан на предыдущем шаге, другая строковая переменная начинает ссылаться на ранее созданный экземпляр строкового объекта.

На следующем изображении показано графическое объяснение для « firstString » и « secondString », указывающих на строку «coderolls» в пуле строк.


Когда мы создаем строку с помощью оператора new , новый строковый объект создается и сохраняется в пространстве кучи Java.

Выше мы видим, что « firstString » и « secondString » указывают на строку « coderolls » в пуле строк, а « ThirdString » указывают на « coderolls » в пространстве кучи Java. Он возвращает отрицательное целое число, если строка аргумента лексикографически больше указанной строки, т. е. если строка аргумента следует за указанной строкой. (строка аргумента > указанная строка)

Возвращает положительное целое число, если строка аргумента лексикографически меньше указанной строки, т. е. если строка аргумента предшествует указанной строке. (строка аргумента < указанная строка)

Возвращает ноль, если обе строки лексикографически равны. (строка аргумента = указанная строка)

Если вы хотите игнорировать регистры обеих строк, используйте метод compareToIgnoreCase() .

Я дал программу для сравнения строк с использованием метода compareTo() . Он также состоит из варианта игнорирования случаев с помощью метода compareToIgnoreCase() .

Вывод:

Я написал подробную статью о том, как лексикографически сравнивать строки в Java, если вы хотите узнать больше.

Заключение

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

  1. Используя equals()  метод: equals()  метод в строках, используемый для проверки равенства строковых значений, содержат ли они одинаковую последовательность символов.
  2. Использование оператора == : == Оператор, используемый для проверки равенства ссылок двух строк, указывают ли они на один и тот же строковый объект.
  3. Использование compareTo()  метод: compareTo()  метод, используемый для лексикографической проверки строк, т. е. по алфавиту. Ознакомьтесь с подробными статьями о том, как сравнивать строки лексикографически.

Большинство начинающих Java-разработчиков допускают ошибки при сравнении строк. Они хотят проверить содержимое строки, но используют для этого оператор == .

Всегда рекомендуется использовать метод equals() для сравнения строки на основе ее содержимого.

Если у вас есть какие-либо вопросы о приведенных выше блоках кода, запишите их в разделе комментариев ниже. Кроме того, дайте мне знать, если у вас есть другой способ сравнить две строки в Java в разделе комментариев.

Первоначально эта статья была опубликована на странице coderolls. com/compare-strings-in-java.

Дополнительное чтение

Что можно и чего нельзя делать со строками Java

Учебные пособия по работе со строками Java: станьте виртуозом работы со строками Java

струны Java (язык программирования) Типы данных

Опубликовано на DZone с разрешения Gaurav Kukade. Смотрите оригинальную статью здесь.

Мнения участников DZone являются их собственными.

404: Страница не найдена

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

Что я могу сделать сейчас?

Если вы впервые посещаете TechTarget, добро пожаловать! Извините за обстоятельства, при которых мы встречаемся. Вот куда вы можете пойти отсюда:

Поиск
  • Ознакомьтесь с последними новостями.
  • Наша домашняя страница содержит самую свежую информацию о Java-разработке.
  • Наша страница «О нас» содержит дополнительную информацию о сайте, на котором вы находитесь, TheServerSide.com.
  • Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.

Поиск по категории

SearchAppArchitecture

  • Почему контрактное тестирование может быть необходимо для микросервисов

    Разработчики сталкиваются с многочисленными проблемами, пытаясь выполнить традиционное сквозное интеграционное тестирование микросервисов. Контракт…

  • Растущая роль разработчиков, ориентированных на данные

    Больше, чем когда-либо, растущая зависимость разработчиков от данных, источников данных и пользователей подталкивает разработчиков к пониманию ИТ-покупок . ..

  • 12 рекомендаций по безопасности API для защиты вашего бизнеса

    Как и в любом цикле разработки программного обеспечения, безопасность API должна быть встроена с самого начала. Следуйте этим рекомендациям по проектированию, развертыванию…

ПоискПОКачество

  • Устойчивое программное обеспечение нуждается в большем количестве инструментов, корпоративной поддержке

    Несколько инструментов могут помочь разработчикам создавать устойчивое программное обеспечение, но они не помогут сократить выбросы углерода без организационной…

  • Чтобы безопасность API была успешной, разработчикам нужны интегрированные инструменты

    Для большей безопасности API и более четких границ для разработчиков эксперты API World призвали к инструментам безопасности, ориентированным на разработчиков …

  • Документация по API может улучшить или испортить опыт разработчиков

    На конференции API World на этой неделе эксперты освещают проблемы, связанные с плохой документацией API, и предлагают способы их устранения, например отказ от . ..

SearchCloudComputing

  • Проверьте себя по основам облачных вычислений

    Чтобы понять технологию, лучше всего начать с основ. Пройдите этот краткий тест по облачным вычислениям, чтобы оценить свои знания о …

  • С помощью этого руководства настройте базовый рабочий процесс AWS Batch

    AWS Batch позволяет разработчикам запускать тысячи пакетов в AWS. Следуйте этому руководству, чтобы настроить этот сервис, создать свой собственный…

  • Партнеры Oracle теперь могут продавать Oracle Cloud как свои собственные

    Alloy, новая инфраструктурная платформа, позволяет партнерам и аффилированным с Oracle предприятиям перепродавать OCI клиентам в регулируемых …

ПоискБезопасность

  • Минфин США: число атак программ-вымогателей в 2021 году увеличилось

    Новый отчет Сети по борьбе с финансовыми преступлениями Министерства финансов США показал рост числа компаний, сообщающих о программах-вымогателях . ..

  • Уязвимости OpenSSL получают высокоприоритетные исправления

    Во вторник проект OpenSSL выпустил версию 3.0.7 для устранения пары серьезных уязвимостей переполнения буфера в …

  • Почему идеальная структура отчетности CISO — это самый высокий уровень

    Директора по информационной безопасности обычно отчитываются перед руководителем высокого уровня, но подотчетны руководителю высшего уровня, например генеральному директору, а не …

ПоискAWS

  • AWS Control Tower стремится упростить управление несколькими учетными записями

    Многие организации изо всех сил пытаются управлять своей огромной коллекцией учетных записей AWS, но Control Tower может помочь. Услуга автоматизирует…

  • Разбираем модель ценообразования Amazon EKS

    В модели ценообразования Amazon EKS есть несколько важных переменных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *