StringUtils'e Giriş

StringUtils , en çok kullanılan Apache Commons sınıfıdır. Geliştiricilerin temel işlemler için standart veya hantal kod yazmaktan kaçınmasına yardımcı olan çeşitli yardımcı programlar ve yöntemler içerir.

StringUtils sınıfındaki yöntemlerin çoğunun java.lang.String eşdeğerleri vardır , ancak java.lang.String yöntemlerinin aksine , null-safe'dir. Bu, bir NullPointerException'ın en beklenmedik anda atılmadığı anlamına gelir .

Apache Commons bir dizi yöntem içerir ve en sık kullanılanlardan bazılarına bakacağız.

StringUtils yöntemlerinin listesi:

boş() Bir dizenin boş olup olmadığını kontrol eder
eşittir() Dizeleri karşılaştırır
karşılaştırmak() Dizeleri karşılaştırır
indeksi() Bir dizede bir alt dize bulma
lastIndexOf() Bir dizede bir alt dize bulma
içerir() Bir alt dizenin bir dizede olup olmadığını kontrol eder
içerirIgnoreCase() Büyük/küçük harf yok sayılarak bir dizede bir alt dizenin bulunup bulunmadığını kontrol eder
içerirHerhangi () Bir dizginin herhangi bir yerinde bir alt dizginin oluşup oluşmadığını kontrol eder.
Yok() içerir Bir dizginin herhangi bir yerinde bir alt dizginin oluşup oluşmadığını kontrol eder.
Yalnızca içerir() Bir alt dizenin bir dizede olup olmadığını kontrol eder
alt dize () Bir alt dize alma
bölmek() Bir diziyi alt dizilere bölme
katılmak() alt dizileri birleştir
kaldırmak() Bir alt dizeyi kaldırma
yer değiştirmek() Alt dizeyi değiştir
CountMatch() Eşleşme sayısını sayma

StringUtils.isEmpty() ve StringUtils.isBlank()

Her iki yöntem de bir dizenin herhangi bir metin içerip içermediğini kontrol etmek için kullanılır. Dize gerçekten boşsa, true döndürürler. Ayrıca, dize yalnızca boşluk içeriyorsa isBlank() da true değerini döndürür .

Ayrıca kendi ters yöntemleri vardır: isNotEmpty() ve isNotBlank() .

Şimdi isEmpty() öğesini java.lang.String.isEmpty() muadili ve isBlank() ile birlikte nasıl kullanabileceğinizi görelim :

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

Burada String türünde üç değişken vardır . Biri null öğesini işaret eder , ikincisi null değildir ancak içeriği yoktur (boş bir dize) ve üçüncüsü boş değildir ancak boş bir sonuç yazdırır.

Bu kodu çalıştırmak şunlarla sonuçlanır:

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

Java.lang.String içinde yerleşik olan isEmpty() yöntemi, null güvenli değildir . Boş olup olmadığını kontrol etmeye çalışırsanız, kolayca bir NullPointerException alırsınız , çünkü yöntemi null başvurusunda çağırırsınız . Referansın boş olup olmadığını önceden kontrol etmek gerekli olacaktır:

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

Şimdi bu şu şekilde sonuçlanır:

emptyValue is emptyValue
blankValue is blankValue

Ve eğer bu yöntemleri üzerinde test ederseknullDizesi:

String nullValue = null;

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

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

Sonra şunu elde ederiz:

nullValue is emptyValue
nullValue is blankValue

StringUtils yöntemleri null güvenlidir ve null geçilse bile beklenen sonucu üretir .

StringUtils.equals()

Bu yöntem iki dizeyi karşılaştırır ve aynıysa veya her iki başvuru da null değerini gösteriyorsa true değerini döndürür , ancak bu yöntemin büyük/küçük harfe duyarlı olduğunu unutmayın.

Nasıl çalıştığını görelim:

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

Sonuç:

true
false
false
true
false

StringUtils'teki equals() yöntemini java.lang.String.equals () ile karşılaştırmak için :

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

Bu sizi şuraya geri getirir:

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

Yine, boş referansta bir yöntemin çağrılması NullPointerException ile sonuçlanır ve kullanmadan önce referans değişkeninin boş olup olmadığını kontrol etmeniz gerekir .

StringUtils.compare()

Bu yöntemin bildirimi şöyle görünür:

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

Java.lang.String.compareTo() yönteminin yaptığı gibi, bu yöntem iki dizgiyi sözlüksel olarak karşılaştırır ve şunu döndürür:

  • 0, eğer str1, str2'ye eşitse (veya her ikisi de boşsa)
  • str1 str2'den küçükse değer 0'dan küçüktür
  • str1 str2'den büyükse değer 0'dan büyük

Sözlük düzeni, sözlük düzenidir. Bunu programımızda nasıl kullanabileceğimize bakalım:

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

Biz:

0
-1
1
32
0

Not: Bir boş değer, boş olmayan bir değerden daha küçük kabul edilir . İki boş değer eşit kabul edilir.

Bir dizenin başka bir alt dize içerip içermediğini kontrol etme

Bunu yapmak için StringUtils'in 5 yöntemi vardır:

  • içerir()
  • içerirIgnoreCase()
  • içerirHerhangi ()
  • Yok() içerir
  • Yalnızca içerir()

include() yöntemi, arama dizisinin başka bir dizide bulunup bulunmadığına bağlı olarak true veya false döndürür .

Böyle bir yönteme null iletilirse , false döndürür . Non- null aktarılırsa , yöntem iletilen nesnede basitçe java.lang.String.indexOf(String str) öğesini çağırır.

Örnekler:

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

Yöntem büyük/küçük harfe duyarlıdır, bu nedenle son çağrı da false döndürür :

false
true
false
false

İlk bağımsız değişken olarak iletilen dize, 2-N bağımsız değişkenlerinde iletilen alt dizelerden en az birini içeriyorsa, includeAny() yöntemi true değerini döndürür .

Örnek:

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

Gösterecek:

true

Bu yöntem ayrıca büyük/küçük harfe duyarlıdır.

includeNone() yöntemi

Belirli bir dizenin listeden herhangi bir şey içermediğini kontrol etmeniz gerektiğinde, includeNone() yöntemini kullanabilirsiniz . İlk parametre bir dizedir ve aşağıdaki parametreler hedef havuzda olmaması gereken dizelerdir.

Örnek:

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

Konsol çıktısı:

false

Alt dizelerle çalışma

Alt dizelerle çalışmak, String sınıfının yöntemleriyle çalışmaya benzer :

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

Bu yöntemler, str dizesinden bir alt dize döndürür . Dize iki dizinle verilir: start ve end . Ve Java'da her zaman olduğu gibi, aralığın son karakteri end-1'dir . Bu yöntemlerin avantajı nedir?

Böyle bir yönteme null iletirseniz , bir istisna atmak yerine yalnızca null değerini döndürür . Bu yöntemler negatif dizin değerlerini destekler. Bu durumda, dizi kapalı bir döngü olarak kabul edilir. Son karakterden sonra ilk karakter gelir ve bu böyle devam eder.

Nasıl kullanabileceğimize bakalım:

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

Yukarıdaki kodu çalıştırmak bize şunu verir:

ts j
ets java
null

StringUtils.split()

Özel bir sınırlayıcı karakter kullanarak bir dizeyi alt dizelere ayırmanıza izin veren bir yöntem. Hedef dizede bir tane varsa, yöntem bir alt dize dizisi döndürür. Karakter yoksa boş bir dizi döndürülür. Yönteme null iletilirse, null değerini döndürür . Bu koda ve yöntemin nasıl çalıştığına bir göz atalım:

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

Sonuç:

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

StringUtils.join()

join() yöntemi, bir dize dizisini tek bir dizede birleştirmenize olanak tanır. Aynı zamanda, ortaya çıkan dizide alt diziler arasına eklenecek özel bir ayırıcı karakter geçirilebilir. Ve yönteme null iletilirse, o zaman null değerini döndürür .

Bu yöntem , split() yönteminin tam tersidir . Bu basit örneğe bakalım:

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

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

Yukarıdaki kodu çalıştırmak bize şunu verir:

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

StringUtils.replace()

Bir dizi içinde bir dizi arar, varsa bulur ve tüm geçtiği yerleri yeni bir dizeyle değiştirir.

Bu yöntemin bildirimi şöyle görünür:

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

Arama dizesi metinde bulunmazsa hiçbir şey olmaz ve metin aynı kalır. Aynı mantığı izleyerek, metin null ise , bu yöntem null değerini döndürür . Boş bir dize arıyorsanız veya bir alt dizeyi null ile değiştiriyorsanız , yöntem orijinal dizeyi döndürür.

Bu yöntemi deneyelim:

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

Sonuç:

CodeGym is the cool