Panimula sa StringUtils

Ang StringUtils ay ang pinaka ginagamit na klase ng Apache Commons. Naglalaman ito ng iba't ibang mga utility at pamamaraan na tumutulong sa mga developer na maiwasan ang pagsusulat ng boilerplate o simpleng mahirap gamitin na code para sa mga pangunahing operasyon.

Marami sa mga pamamaraan sa klase ng StringUtils ay may katumbas na java.lang.String ngunit, hindi katulad ng mga pamamaraan ng java.lang.String , ay null-safe. Nangangahulugan ito na ang isang NullPointerException ay hindi itinapon sa pinaka hindi inaasahang sandali.

Naglalaman ang Apache Commons ng ilang pamamaraan, at titingnan natin ang ilan sa mga pinakakaraniwang ginagamit.

Listahan ng mga pamamaraan ng StringUtils:

isEmpty() Sinusuri kung walang laman ang isang string
katumbas ng() Naghahambing ng mga string
ihambing () Naghahambing ng mga string
indexOf() Paghahanap ng substring sa isang string
lastIndexOf() Paghahanap ng substring sa isang string
naglalaman ng() Sinusuri kung ang isang substring ay nasa isang string
naglalaman ngIgnoreCase() Sinusuri ang paglitaw ng isang substring sa isang string, hindi pinapansin ang case
naglalaman ngAny() Sinusuri kung ang isang substring ay nangyayari kahit saan sa isang string
containsNone() Sinusuri kung ang isang substring ay nangyayari kahit saan sa isang string
containsOnly() Sinusuri kung ang isang substring ay nasa isang string
substring() Pagkuha ng substring
hati() Paghahati ng string sa mga substring
sumali() pagdugtungin ang mga substring
alisin () Pag-alis ng substring
palitan() Palitan ang substring
countMatches() Binibilang ang bilang ng mga tugma

StringUtils.isEmpty() at StringUtils.isBlank()

Ang parehong mga pamamaraan ay ginagamit upang suriin kung ang isang string ay naglalaman ng anumang teksto. Nagbabalik sila ng totoo kung talagang walang laman ang string. Bilang karagdagan, ang isBlank() ay magbabalik din ng true kung ang string ay naglalaman lamang ng mga puwang.

Mayroon din silang sariling mga kabaligtaran na pamamaraan: isNotEmpty() at isNotBlank() .

Tingnan natin kung paano mo magagamit ang isEmpty() kasama ang java.lang.String.isEmpty() counterpart nito , gayundin ang 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");
}

Mayroong tatlong mga variable ng uri ng String dito . Ang isa ay tumuturo sa null , ang pangalawa ay hindi null ngunit walang nilalaman (isang walang laman na string), at ang pangatlo ay hindi walang laman ngunit magpi-print ng isang walang laman na resulta.

Ang pagpapatakbo ng code na ito ay nagreresulta sa:

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

Ang isEmpty() method na binuo sa java.lang.String ay hindi null safe . Madali kang makakakuha ng NullPointerException kung susubukan mong tingnan kung ito ay walang laman, dahil tinatawag mo ang pamamaraan sa isang null reference . Kakailanganing suriin nang maaga kung ang sanggunian ay 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");
}

Ngayon nagreresulta ito sa:

emptyValue is emptyValue
blankValue is blankValue

At kung susuriin natin ang mga pamamaraang ito sanullString:

String nullValue = null;

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

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

Pagkatapos makuha namin:

nullValue is emptyValue
nullValue is blankValue

Ang mga pamamaraan ng StringUtils ay null safe at gumagawa ng inaasahang resulta kahit na naipasa ang mga ito null .

StringUtils.equals()

Ang pamamaraang ito ay naghahambing ng dalawang string at nagbabalik ng totoo kung magkapareho ang mga ito o kung ang parehong mga sanggunian ay tumuturo sa null , ngunit magkaroon ng kamalayan na ang pamamaraang ito ay case sensitive.

Tingnan natin kung paano ito gumagana:

System.out.println(StringUtils.equals(null, null));
System.out.println(StringUtils.equals(null, "some information"));
System.out.println(StringUtils.equals("some information", null));
System.out.println(StringUtils.equals("some information",  "some information"));
System.out.println(StringUtils.equals("some additional information", "some information"));

Resulta:

true
false
false
true
false

Upang ihambing ang equals() na pamamaraan mula sa StringUtils sa java.lang.String.equals() :

String nullValue = null;

System.out.println(StringUtils.equals(nullValue, null));
System.out.println(StringUtils.equals(nullValue, "some information"));

System.out.println(nullValue.equals(null));
System.out.println(nullValue.equals("some information"));

Ibinabalik ka nito sa:

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

Muli, ang pagtawag sa isang pamamaraan sa isang null reference ay nagreresulta sa isang NullPointerException , at kakailanganin mong suriin kung ang reference na variable ay null bago ito gamitin.

StringUtils.compare()

Ang deklarasyon ng paraang ito ay ganito:

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

Ang pamamaraang ito ay naghahambing ng dalawang string sa lexicographically, tulad ng ginagawa ng java.lang.String.compareTo() method , na nagbabalik:

  • 0 kung ang str1 ay katumbas ng str2 (o pareho ang null)
  • Ang halaga ay mas mababa sa 0 kung ang str1 ay mas mababa sa str2
  • Mas malaki ang value sa 0 kung mas malaki ang str1 kaysa sa str2

Ang ayos ng leksikograpikal ay ang ayos ng diksyunaryo. Tingnan natin kung paano natin ito magagamit sa ating programa:

System.out.println(StringUtils.compare(null, null));
System.out.println(StringUtils.compare(null , "codeGym"));
System.out.println(StringUtils.compare("codeGym", null));
System.out.println(StringUtils.compare("codeGym", "CODEGYM"));
System.out.println(StringUtils.compare("codeGym", "codeGym"));

Nakukuha namin:

0
-1
1
32
0

Tandaan: Ang isang null na halaga ay itinuturing na mas mababa kaysa sa isang hindi null na halaga . Dalawang null value ang itinuturing na pantay.

Sinusuri kung ang isang string ay naglalaman ng isa pang substring

Upang gawin ito, ang StringUtils ay may 5 pamamaraan:

  • naglalaman ng()
  • naglalaman ngIgnoreCase()
  • naglalaman ngAny()
  • containsNone()
  • containsOnly()

Ang contains() method ay nagbabalik ng true o false depende sa kung ang search sequence ay nakapaloob sa ibang sequence o hindi.

Kung ang null ay naipasa sa ganitong paraan , ito ay magbabalik ng false . Kung ang hindi null ay naipasa , ang pamamaraan ay tatawag lamang ng java.lang.String.indexOf(String str) sa naipasa na bagay.

Mga halimbawa:

String value = "CodeGym is cool";

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

Ang pamamaraan ay case sensitive, kaya ang huling tawag ay magbabalik din ng false :

false
true
false
false

Ang containsAny() method ay nagbabalik ng true kung ang string na ipinasa bilang ang unang argument ay naglalaman ng kahit isa lang sa mga substring na ipinasa sa 2-N na mga argumento.

Halimbawa:

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

Ipapakita ang:

true

Case sensitive din ang pamamaraang ito.

containsNone() method

Kapag kailangan mong suriin na ang isang tiyak na string ay walang anumang bagay mula sa listahan, maaari mong gamitin ang containsNone() method . Ang unang parameter ay isang string, at ang mga sumusunod na parameter ay mga string na hindi dapat nasa target na lababo.

Halimbawa:

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

Output ng console:

false

Paggawa gamit ang mga substring

Ang pagtatrabaho sa mga substring ay katulad ng pagtatrabaho sa mga pamamaraan ng klase ng String :

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

Ang mga pamamaraang ito ay nagbabalik ng substring mula sa string str . Ang string ay ibinibigay ng dalawang indeks: simula at wakas . At gaya ng dati sa Java, ang huling character ng range ay end-1 . Ano ang bentahe ng mga pamamaraang ito?

Kung ipapasa mo ang null sa ganoong paraan , ibabalik lamang nito ang null sa halip na maghagis ng exception. Sinusuportahan ng mga pamamaraang ito ang mga negatibong halaga ng index. Sa kasong ito, ang string ay itinuturing bilang isang closed loop. Ang huling karakter ay sinusundan ng una, at iba pa.

Tingnan natin kung paano natin ito magagamit:

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

Ang pagpapatakbo ng code sa itaas ay nagbibigay sa amin ng:

ts j
ets java
null

StringUtils.split()

Isang paraan na nagbibigay-daan sa iyong hatiin ang isang string sa mga substring gamit ang isang espesyal na karakter ng delimiter. Kung mayroong isa sa target na string, ang pamamaraan ay magbabalik ng hanay ng mga substring. Kung walang character, isang walang laman na array ang ibabalik. Well, kung ang null ay ipinasa sa method , ito ay babalik null . Tingnan natin ang code na ito at kung paano gumagana ang pamamaraan:

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("", '.')));

Resulta:

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

StringUtils.join()

Ang paraan ng join() ay nagbibigay-daan sa iyo na pagsamahin ang isang hanay ng mga string sa isang solong string. Kasabay nito, maaaring maipasa dito ang isang espesyal na karakter ng separator, na idaragdag sa pagitan ng mga substring sa resultang string. At kung ang null ay naipasa sa pamamaraan , pagkatapos ay babalik ito ng null .

Ang pamamaraang ito ay ang eksaktong kabaligtaran ng split() na paraan . Tingnan natin ang simpleng halimbawang ito:

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

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

Ang pagpapatakbo ng code sa itaas ay nagbibigay sa amin ng:

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

StringUtils.replace()

Naghahanap ng string sa loob ng string, hinahanap ito kung mayroon, at pinapalitan ang lahat ng paglitaw nito ng bagong string.

Ang deklarasyon ng paraang ito ay ganito:

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

Kung ang string ng paghahanap ay hindi matatagpuan sa teksto, walang mangyayari at ang teksto ay mananatiling pareho. Kasunod ng parehong lohika, kung ang teksto ay null , ang pamamaraang ito ay nagbabalik ng null . Kung naghahanap ka ng null string o pagpapalit ng substring ng null , ibabalik ng pamamaraan ang orihinal na string.

Subukan natin ang pamamaraang ito:

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

Resulta:

CodeGym is the cool