Ծանոթություն 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
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ