Въведение в StringUtils

StringUtils е най-използваният клас на Apache Commons. Той съдържа различни помощни програми и методи, които помагат на разработчиците да избегнат писането на шаблонен or просто тромав code за основни операции.

Много от методите в класа StringUtils имат своите еквиваленти на java.lang.String , но за разлика от методите java.lang.String са защитени от нула. Това означава, че NullPointerException не се хвърля в най-неочаквания момент.

Apache Commons съдържа редица методи и ние ще разгледаме някои от най-често използваните.

Списък на методите на StringUtils:

празно е() Проверява дали даден низ е празен
равно на() Сравнява низове
сравни () Сравнява низове
индекс на() Намиране на подниз в низ
lastIndexOf() Намиране на подниз в низ
съдържа() Проверява дали поднизът е в низ
съдържаIgnoreCase() Проверява за появата на подниз в низ, като пренебрегва главните и малки букви
съдържа Any() Проверява дали подниз се среща някъде в низ
съдържаНяма() Проверява дали подниз се среща някъде в низ
съдържаСамо() Проверява дали поднизът е в низ
подниз() Получаване на подниз
разделяне () Разделяне на низ на поднизове
присъединяване() конкатенирани поднизове
Премахване() Премахване на подниз
замени() Замяна на подниз
countMatches() Преброяване на съвпаденията

StringUtils.isEmpty() и StringUtils.isBlank()

И двата метода се използват за проверка дали даден низ съдържа няHowъв текст. Те връщат true, ако низът наистина е празен. Освен това isBlank() също ще върне true , ако низът съдържа само интервали.

Те също имат свои собствени обратни методи: isNotEmpty() и isNotBlank() .

Нека да видим How можете да използвате isEmpty() заедно с неговия аналог java.lang.String.isEmpty() , Howто и 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 , но няма съдържание (празен низ), а третият не е празен, но ще отпечата празен резултат.

Изпълнението на този code води до:

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

Методът isEmpty() вграден в java.lang.String не е нулев безопасен . Лесно ще получите NullPointerException, ако се опитате да проверите дали е празен, защото извиквате метода на нулева препратка . Ще бъде необходимо да се провери предварително дали препратката е нула:

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 , ако те са идентични or ако и двете препратки сочат към null , но имайте предвид, че този метод е чувствителен към главни и малки букви.

Да видим How работи:

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"));

Резултат:

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, "some information"));

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

Това ви връща към:

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

Отново извикването на метод на нулева препратка води до NullPointerException и ще трябва да проверите дали референтната променлива е нулева , преди да я използвате.

StringUtils.compare()

Декларацията на този метод изглежда така:

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

Този метод сравнява два низа лексикографски, Howто прави методът java.lang.String.compareTo() , като връща:

  • 0 ако str1 е равно на str2 (or и двете са нула)
  • Стойността е по-малка от 0, ако str1 е по-малко от str2
  • Стойност, по-голяма от 0, ако str1 е по-голямо от str2

Лексикографският ред е редът на речника. Нека да видим How можем да използваме това в нашата програма:

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"));

Получаваме:

0
-1
1
32
0

Забележка: Нулева стойност се счита за по-малка от ненулева стойност . Две нулеви стойности се считат за равни.

Проверка дали даден низ съдържа друг подниз

За да направите това, StringUtils има 5 метода:

  • съдържа()
  • съдържаIgnoreCase()
  • съдържа Any()
  • съдържаНяма()
  • съдържаСамо()

Методът съдържа() връща true or false в зависимост от това дали последователността за търсене се съдържа в друга последователност or не.

Ако null се предаде на такъв метод , той ще върне false . Ако се подаде не- null , методът просто ще извика java.lang.String.indexOf(String str) на подадения обект.

Примери:

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"));

Методът е чувствителен към главни и малки букви, така че последното извикване също ще върне false :

false
true
false
false

Методът containsAny() връща true, ако низът, предаден като първи аргумент, съдържа поне един от поднизовете, предадени в 2-N аргумента.

Пример:

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

Ще покаже:

true

Този метод също е чувствителен към главни и малки букви.

съдържа метод None().

Когато трябва да проверите дали определен низ не съдържа нищо от списъка, можете да използвате метода containsNone() . Първият параметър е низ, а следващите параметри са низове, които не трябва да бъдат в целевия приемник.

Пример:

String s = "CodeGym 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 . Низът е даден от два индекса: начало и край . И Howто обикновено в Java, последният знак от диапазона е end-1 . Какво е предимството на тези методи?

Ако подадете null на такъв метод , той просто ще върне null , instead of да хвърли изключение. Тези методи поддържат отрицателни стойности на индекса. В този случай низът се счита за затворен цикъл. Последният знак е последван от първия и т.н.

Нека да видим How можем да го използваме:

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

Изпълнението на горния code ни дава:

ts j
ets java
null

StringUtils.split()

Метод, който ви позволява да разделите низ на поднизове с помощта на специален разделителен знак. Ако има такъв в целевия низ, тогава методът ще върне масив от поднизове. Ако няма знак, ще бъде върнат празен масив. Е, ако null се предаде на метода , той ще върне null . Нека да разгледаме този code и How работи методът:

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

Изпълнението на горния code ни дава:

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

StringUtils.replace()

Търси низ в низ, намира го, ако съществува, и заменя всички негови срещания с нов низ.

Декларацията на този метод изглежда така:

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

Ако търсеният низ не бъде намерен в текста, нищо няма да се случи и текстът ще остане същият. Следвайки същата логика, ако текстът е null , този метод връща null . Ако търсите нулев низ or заменяте подниз с null , тогава методът ще върне оригиналния низ.

Нека опитаме този метод:

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

Резултат:

CodeGym is the cool