JavaRush /Курсы /All lectures for AM purposes /StringUtils կլասը Apache Commons-ից

StringUtils կլասը Apache Commons-ից

All lectures for AM purposes
1 уровень , 474 лекция
Открыта

Ծանոթություն StringUtils-ի հետ

StringUtils — ամենաշատ օգտագործվող կլասն է Apache Commons-ում։ Այն պարունակում է տարբեր ֆունկցիոնալության գործիքներ և մեթոդներ, որոնք օգնում են ծրագրավորողներին խուսափել պարզ կամ ծանր կոդի գրելուց հիմնական գործողությունների համար:

Շատ մեթոդներ StringUtils-ում ունեն իրենց համարժեքները java.lang.String-ում, բայց, ի տարբերություն java.lang.String-ի մեթոդների, նրանք անվտանգ են null-ի հետ աշխատելու համար։ Դա նշանակում է, որ NullPointerException-ի բացառումը չի նետվում ամենաուշացող պահերի ժամանակ:

Apache Commons-ը պարունակում է մի քանիսը մեթոդների, և մենք կքննարկենք ամենաշատ օգտագործվողներից մի քանիսը։

StringUtils մեթոդների ցուցակ:

isEmpty() Ստուգում է, արդյոք տողը դատարկ է
equals() Համեմատում է տողերը
compare() Համեմատում է տողերը
indexOf() Ենթատողի որոնում տողում
lastIndexOf() Ենթատողի որոնում տողում
contains() Ստուգում է ենթատողի առկայությունը տողում
containsIgnoreCase() Ստուգում է ենթատողի առկայությունը տողում, անտեսելով ռեգիստր
containsAny() Ստուգում է ենթատողի առկայությունը ցանկացած վայրում տողում
containsNone() Ստուգում է, որ ենթատողը չկա ոչ մի տեղ տողում
containsOnly() Ստուգում է ենթատողի առկայությունը տողում
substring() Ստանում է ենթատող
split() Բաժանում է տողը ենթատողերի
join() Միացնում է ենթատողերը
remove() Հեռացնում է ենթատողը
replace() Փոխարինում է ենթատողը
countMatches() Հաշվում է համարժեքությունների քանակը

StringUtils.isEmpty() և StringUtils.isBlank()

Երկու մեթոդներն օգտագործվում են ստուգելու համար, արդյոք տողը որևէ բովանդակություն պարունակում է։ Նրանք սահմանափակում են true, եթե տողը իսկապես դատարկ է։ Բացի այդ, isBlank() նույնպես վերադարձնում է true, եթե տողը պարունակում է միայն բացատներ:

Նրանք ունեն նաև հակադարձ մեթոդներ՝ isNotEmpty() և isNotBlank():

Դիտենք, թե ինչպես կարող ես օգտագործել isEmpty() -ը նրա համարժեքով java.lang.String.isEmpty()-ի հետ, ինչպես նաև isBlank():


String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(!nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

Այսօր ենք երեք փոփոխական String տիպի։ Մեկը ցույց է տալիս null-ին, երկրորդը չէ null, բայց չունի բովանդակություն (դատարկ տող), իսկ երրորդը դատարկ չէ, բայց տպելիս կտա դատարկ արդյունք:

Այս կոդի իրականացումը հանգեցնում է:

emptyValue is emptyValue
blankValue is blankValue
Exception in thread "main" java.lang.NullPointerException

isEmpty() մեթոդը, որը ներկառուցված է java.lang.String-ում, անվտանգ չէ null-ի համար։ Եթե փորձես ստուգել, արդյոք այն դատարկ է, կարող ես առանց խնդիրներ NullPointerException ստանալ։ Պետք է նախ իմանալ, արդյոք ցուցիչը null է.


String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(nullValue != null && !nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

Այժմ դա հանգեցնում է:

emptyValue is emptyValue
blankValue is blankValue

Եվ եթե փորձենք նորից այս մեթոդները nullString-ի վրա:


String nullValue = null;

if(StringUtils.isEmpty(nullValue)) {
   System.out.println("nullValue is emptyValue");
}

if(StringUtils.isBlank(nullValue)) {
   System.out.println("nullValue is blankValue");
}

Կստացվի:

nullValue is emptyValue
nullValue is blankValue

StringUtils մեթոդները անվտանգ են null-ի համար և տալիս են սպասված արդյունքը, նույնիսկ եթե նրանց փոխանցում են null.

StringUtils.equals()

Այս մեթոդը համեմատում է երկու տողերը և վերադարձնում է true, եթե դրանք նույնական են կամ երկուսն էլ ցույց են տալիս null-ին, սակայն հարցին, որ այս մեթոդը զգայուն է ռեգիստրի նկատմամբ:

Հնարավոր է ուսումնասիրել, թե ինչպես է այն գործում:


System.out.println(StringUtils.equals(null, null));
System.out.println(StringUtils.equals(null, "ինչ-որ տեղեկություն"));
System.out.println(StringUtils.equals("ինչ-որ տեղեկություն", null));
System.out.println(StringUtils.equals("ինչ-որ տեղեկություն",  "ինչ-որ տեղեկություն"));
System.out.println(StringUtils.equals("ինչ-որ լրացուցիչ տեղեկություն", "ինչ-որ տեղեկություն"));

Արդյունքը:

true
false
false
true
false

​Համեմատության մեթոդ equals()StringUtils-ից java.lang.String.equals()-ի հետ:


String nullValue = null;

System.out.println(StringUtils.equals(nullValue, null));
System.out.println(StringUtils.equals(nullValue, "ինչ-որ տեղեկություն"));

System.out.println(nullValue.equals(null));
System.out.println(nullValue.equals("ինչ-որ տեղեկություն"));

Այն դառնում է քեզ:

true
false
Exception in thread "main" java.lang.NullPointerException

Եվս մեկ անգամ, մեթոդի կանչը null ցուցիչի համար բերում է NullPointerException բացառմանը, և անհրաժեշտ կլինի սպասարկիչով նախօրոք ստուգել, արդյոք ցուցիչի փոփոխականը null է, մինչ իմանալ:

StringUtils.compare()

Այս մեթոդի հայտարարությունը հետևյալ տեսքն ունի:


public static int compare(final String str1, final String str2)

Այս մեթոդը համեմատում է երկու տողեր լեքսիկոգրաֆիկորեն, ինչպես դա անում է java.lang.String.compareTo() մեթոդը․ վերադարձնելով:

  • 0, եթե str1 հավասար է str2 (կամ երկուսն էլ հավասար են null)
  • Արժեքը 0-ից պակաս, եթե str1-ն փոքր է str2-ից
  • Արժեքը մեծ է 0-ից, եթե str1 մեծ է str2-ից

Լեքսիկոգրաֆիկական կարգը – դա բառարանի կարգ է։ Դիտենք, թե ինչպես կարող ենք օգտագործել սա մեր ծրագրում:


System.out.println(StringUtils.compare(null, null));
System.out.println(StringUtils.compare(null , "javaRush"));
System.out.println(StringUtils.compare("javaRush", null));
System.out.println(StringUtils.compare("javaRush", "JAVARUSH"));
System.out.println(StringUtils.compare("javaRush", "javaRush"));

Ստանում ենք:

0
-1
1
32
0

Նշում: null արժեքը համարվում է փոքր, քան իսկական արժեքը։ Երկու null արժեքներ համարվում են նույնական:

Ստուգում ենք, պարունակում է տողը այլ ենթատող

Դրա համար StringUtils-ում կա 5 մեթոդ:

  • contains()
  • containsIgnoreCase()
  • containsAny()
  • containsNone()
  • containsOnly()

contains() մեթոդը վերադարձնում է true կամ false՝ կախված նրանից, թե որոնվող հաջորդականությունը մյուս հաջորդականության մեջ է պարունակվում, թե ոչ:

Եթե null փոխանցված է այսպիսի մեթոդին, այն կվերադարձնի false։ Եթե փոխանցվում է ոչ null, մեթոդը պարզապես կկանչի java.lang.String.indexOf(String str) փոխանցված օբյեկտի վրա:

Օրինակներ:


String value = "JavaRush is cool";

System.out.println(StringUtils.contains(null, "a"));
System.out.println(StringUtils.contains(value, "JavaRush"));
System.out.println(StringUtils.contains(value, "C++"));
System.out.println(StringUtils.contains(value, "javarush"));

Մեթոդը զգայուն է ռեգիստրի նկատմամբ, այնպես որ վերջին կանչը նույնպես կվերադարձնի false:

false
true
false
false

containsAny() մեթոդը վերադարձնում է true, եթե սկզբնական գրավոր տողը պարունակում է առնվազն մեկ ենթատող, տեղափոխված 2-N արգումենտներով:

Օրինակ:


String value = "JavaRush is cool";
System.out.println(StringUtils.containsAny(value, "cool", "c00l", "bro", "hello"));

Կտպի էկրանի վրա:

true

Այս մեթոդը նույնպես զգայուն է ռեգիստրի նկատմամբ:

containsNone() մեթոդը

Երբ անհրաժեշտ է ստուգել, որ որոշված տողը ոչինչ չի պարունակում ցուցակից, կարող եք դիմել containsNone() մեթոդին։ Առաջին պարամետրում այն փոխանցվում է տողը, իսկ մյուս պարամետրերը՝ տողեր, որոնք չպետք է լինեն նպատակի տողում:

Օրինակ:


String s = "JavaRush is cool";
System.out.println(StringUtils.containsNone(s, 'g', 'a'));

Կոնսոլում արտածում է՝

false

Աշխատանք ենթատողերի հետ

Աշխատանք ենթատողերի հետ նման է String կլասի մեթոդների աշխատանքին:


substring(String str, int start)
substring (String str, int start, int end)

Այս մեթոդները վերադարձնում են ենթատող str տողից։ Տողը տրվում է երկու ինդեքսներով՝ start և end։ Ինչպես ընդունված է Java-ում, վերջին սիմվոլի տարաձայնությունը end-1 է։ Որն է այս մեթոդների առավելությունը?

Եթե այս ձեւավորվող մեթոդին null փոխանցես, այն պարզապես կվերադարձնի null, և ոչ թե կձևավորի բացառում։ Այս մեթոդները ընդունում են անտիկապիտառ ինդեքսների արժեքները։ Այս դեպքում տողը ներկայացվում է որպես անտեսանելի լարի։ Վերջին սիմվոլից հետո հաջորդում է առաջինը և այլն:

Դիտենք, թե ինչպես կարող ենք այն օգտագործել:


System.out.println(StringUtils.substring("lets java", 2, 6));
System.out.println(StringUtils.substring("lets java", -8));
System.out.println(StringUtils.substring(null, 3));

Նախորդ կոդի կատարման արդյունքում ստանում ենք:

ts j
ets java
null

StringUtils.split()

Մեթոդ, որը թույլ է տալիս բաժանել տողը ենթատողերի, օգտագործելով հատուկ սիմվոլ-բաժանարար։ Եթե այն կա նպատակային տողում, մեթոդը կվերադարձնի ենթատողերի զանգվածը։ Եթե սիմվոլ չկա, կվերադառնա դատարկ զանգված։ Եվ եթե մեթոդին փոխանցվի null, այն կվերադարձնի null։ Եկեք դիտենք այս կոդը և մեթոդի աշխատանքը:


String myData = "Address, City, State, Zip, Phone, Email, Password";

System.out.println(Arrays.toString(StringUtils.split(myData, ',')));
System.out.println(Arrays.toString(StringUtils.split(null, '.')));
System.out.println(Arrays.toString(StringUtils.split("", '.')));

Արդյունքը:

[Address,  City,  State,  Zip,  Phone,  Email,  Password]
null
[]

StringUtils.join()

join() մեթոդը թույլ է տալիս միացնել ենթատողերի զանգվածը մեկ տողի մեջ։ Մեկտեղ մեջ կարող է փոխանցվել հատուկ սիմվոլ-բաժանարար, որը կավելացվի ենթատողերի մեջ վերջնականում։ Եվ եթե մեթոդին փոխանցվի null, դա կվերադարձնի null:

Այս մեթոդը ուղղակի տեսական հակառակն է split() մեթոդի։ Հնարավոր է դիտել այս պարզ օրինակը:


String myData = "Address, City, State, Zip, Phone, Email, Password";

String[] myString =  StringUtils.split(myData, ',');
System.out.println(StringUtils.join(myString, '-'));

Նախորդ կոդի կատարումը մեզ տալիս է՝

Address- City- State- Zip- Phone- Email- Password

StringUtils.replace()

Ոնտրում է ինչ-որ տող կետում, գտնում է այն, եթե այն գոյություն ունի, և փոխարինում է դրա բոլոր հանդիպումները նոր տողով։

Այս մեթոդի հայտարարությունը հետևյալ տեսքն ունի:

public static String replace(final String text, final String searchString, final String replacement)

Եթե տողը որոնվում է չգտնված տեքստում, ապա ոչինչ չի փոխվում և տեքստը մնալու է նույնը։ Ինչպես նույն տրամաբանությամբ, եթե տեքստը հավասար է null, այս մեթոդը վերադարձնում է null։ Եթե դու որոնում ես null-տող կամ փոխարինում ես ենթատողին null-ի հետ, ապա մեթոդը կվերադարձնի սկզբնական տողը։

Դիտենք, թե ինչպես կարող ենք այս մեթոդը փորձարկել.


String value = "JavaRush is the best";
System.out.println(StringUtils.replace(value, "best", "cool"));

Արդյունքը:

JavaRush is the cool
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ