Як параўнаць радкі ў Java

Для параўнання радкоў для роўнасці вы павінны выкарыстоўваць аб'ект String equals альбо equalsIgnoreCase метады. Мы таксама ўбачым, чаму мы не павінны выкарыстоўваць == аператар для параўнання радкоў.



Параўнанне радкоў з метадам equals ()

Калі нам трэба параўнаць дзве радкі ў Java, а таксама клапаціцца пра корпус радкоў, мы можам выкарыстоўваць equals() метад.

Напрыклад, наступны фрагмент вызначыць, ці аднолькавыя два экземпляры радка для ўсіх сімвалаў, уключаючы кожух:


public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';

if (firstString.equals(secondString)) {

System.out.println('first and second strings are equal');
}

if (firstString.equals(thirdString)) {

System.out.println('first and third string are equal');
}
} }

Выхад:

first and second strings are equal нататка:Другі выказванне print не выконваецца, таму што рэгістр firstString і thirdString не супадаюць.

Параўнанне радкоў з метадам equalsIgnoreCase ()

Калі нам трэба параўнаць дзве радкі ў Java, але мы не клапоцімся пра корпус радкоў, мы можам выкарыстоўваць equalsIgnoreCase() метад.


Напрыклад, у прыведзеным вышэй фрагменце кода, калі мы замянілі .equals() з .equalsIgnoreCase() , абедзве аператары друку выконваюцца:



public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';

if (firstString.equalsIgnoreCase(secondString)) {

System.out.println('first and second strings are equal');
}

if (firstString.equalsIgnoreCase(thirdString)) {

System.out.println('first and third string are equal');
}
} }

Выхад:

first and second strings are equal
first and third string are equal

Звязаныя:



Не выкарыстоўвайце аператар == для параўнання радкоў

нататка:Параўноўваючы дзве радкі ў Java, мы не павінны выкарыстоўваць == альбо ! = аператары.

Гэтыя аператары на самай справе тэстуюць спасылкі, і паколькі некалькі аб'ектаў String могуць прадстаўляць адзін і той жа радок, гэта можа даць няправільны адказ.


Замест гэтага выкарыстоўвайце String.equals(Object) метад, які будзе параўноўваць аб'екты String на аснове іх значэнняў.

public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test123';
String thirdString = new String('Test123');

if (firstString == secondString) {

System.out.println('first and second strings are equal');
}

if (firstString == thirdString) {

System.out.println('first and third strings are equal');
}
} }

Выхад:

first and second strings are equal нататка:Другі аператар друку не выконваецца.

Параўнанне радкоў з пастаяннымі значэннямі

Пры параўнанні радка з пастаянным значэннем вы можаце паставіць пастаяннае значэнне з левага боку роўна, каб пераканацца, што вы не атрымаеце NullPointerException калі іншая радок нулявая.

Напрыклад:


'baz'.equals(foo)

Пакуль foo.equals('baz') кіне знак NullPointerException калі foo нулявы, 'baz'.equals(foo) будзе ацэньваць у false.

Больш чытэльнай альтэрнатывай з'яўляецца выкарыстанне Objects.equals(), якое выконвае нулявую праверку абодвух параметраў:

напр. Objects.equals(foo, 'baz').



Параўнанне радкоў у выказванні камутатара

Пачынаючы з Java 1.7, можна параўноўваць зменную String з літараламі ў выказванні switch. Пераканайцеся, што радок не роўны нулю, інакш ён заўсёды будзе выдаваць NullPointerException. Значэнні параўноўваюцца з выкарыстаннем String.equals, гэта значыць з улікам рэгістра.


public class CompareTwoStrings {
public static void main(String[] args) {
String stringToSwitch = 'A';


switch (stringToSwitch) {

case 'a':


System.out.println('a');


break;




case 'A':


System.out.println('A'); //the code goes here


break;




case 'B':


System.out.println('B');


break;




default:


break;
}
} }

Выснова

У гэтым паведамленні мы растлумачылі, як параўноўваць радкі ў Java з прыкладамі кода. Калі корпус радкоў мае значэнне, мы павінны выкарыстоўваць .equals() а калі корпус не важны, мы павінны выкарыстоўваць .equalsIgnoreCase().

Больш за тое, мы не павінны выкарыстоўваць == аператар для параўнання радкоў, як == аператар правярае спасылку, а не значэнне.