Java’da String Nesnelerini Karşılaştırma

____________________________________________________________________

Java programlama dilinde birçok yerde String nesnelerini karşılaştırmamız (String comparison) gerekir. String nesnelerinin karşılaştırılması için Java dilinde çeşitli metotlar vardır.

public boolean equals(String str)

İlk metodumuz equals() metodu. Bu metodun kullanımı şöyle olur;
if(str.equals(“abc”)){}
Bu örnekte str bir referanstır ve eğer “abc” strnin değerine eşit ise metot bir boolean değeri olan true döner. Sonrasında da buna dayanarak istediğimizi yaptırabiliriz. Ayrıca karşılaştırılacak metinlerdeki büyük küçük harf farkları önemli değilse equalsIgnoreCase() metodunu da kullanabiliriz.

public Int compareTo(String str)

Diğer metodumuz olan compareTo(),  equals() metoduna göre biraz daha gelişmiştir. Çünkü kelimeleri sadece eşit olup olmadıkları ile değil, sözlük sıralamalarına göre de karşılaştırabilir ve aralarındaki farkı + veya – değerde bir sayı yani Integer olarak dönebilir. Bu metotta karşılaştırma iki metindeki yazıların Unicode değeri ile yapılır.
Burada kelimelerin sözlük sıralamaları önemlidir. Eğer bir kelime sözlükte diğer bir kelimeden önce geliyorsa o sözcükten küçüktür ve eğer sonra geliyorsa da o sözcükten büyüktür.

  • Eğer karşılaştırma sonucunda iki değer birbirine eşitse 0 sayısı döner.
  • Eğer ilk String diğerinden büyükse 0’dan büyük bir değer döner.
  • Eğer ilk String diğerinden küçükse 0’dan küçük bir değer döner.

Sonucun Int dönmesi bize kelimeleri sözlük sıralamasına göre karşılaştırmada kolaylık sağlar.
Eğer karşılaştırılan iki değerinde birbirine eşit olup olmadığı merak ediliyorsa metot bu şekilde kullanılır.
if(str.compareTo(“abc”) == 0) {}
Sözlük sıralamasına göre bir değerin küçük olup olmadığına bakmak için metodu şu şekilde kullanabliriz.
if(str.compareTo(“abc”) < 0) {}
Burada eğer str “abc” metninden küçükse 0 döneceğinden strnin daha küçük bir String nesnesi anlarız.
Eğer iki değerin diğerine eşit veya küçük olduğu merak ediliyorsa <= ile bunu kontrol edebiliriz. Sonuç sayı şeklinde döndüğünden bunu farklı şekillerde çok farklı amaçlarla kullanabiliriz.
Bu yöntemde iki String nesnesi de birbirine göre uzunluk, sözlük sıralaması ve küçük büyük harflerine göre karşılaştırılır. Eğer küçük büyük harflere göre karşılaştırma istemiyorsak compareToIgnoreCase metodunu kullanırız.,

public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)

Bu yöntemle bir değeri diğerinin içinde belli bir bölgede ararız. Bu metosun kullanımı şöyledir;
public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
ignoreCase true ise harflerin büyük küçük olduğuna bakılmaz.
toffset karşılaştırmanın başlayacağı indekstir.
other yerine karşılaştırması yapılacak ikinci String nesnesi girilir.
oofset, other nesnesinin başlangıç indeksini belirtir,
len ile de karşılaştırmanın kaç karakterde yapılacağı belirtilir.

Bu metodu şöyle kullanabiliriz;
if(deger1.regionMatches(true, 0, deger2, 0, deger1.length()))
Bunun manası şudur;
Karşılaştırmada büyük küçük harf farklarına bakılmaz.
deger1 nesnesinin 0 indeksinden yani ilk harfinden karşılaştırma başlar.
deger1 ile karşılaştırılack olan nesne deger2’dir.
deger2’de karşılaştırılacak kısmın indeksi 0’dan başlar.
Karşılaştırılacak karakterlerin uzunluğu deger1’in uzunluğuna eşittir.

public boolean startsWith(String str)

startsWith() metodu ile bir String nesnesinin belirtilen bir metinle başlayıp başlamadığı kontrol edilir. Sonuç true veya false olur. Bunu iki şekilde yapabiliriz.
Ör 1;
public boolean startsWith(String önek)
if(deger1.startsWith(“abc”)) {}
Burada eğer deger1 “abc” ile başlıyorsa metot true döner.
Ör 2;
public boolean startsWith(String önek, Int indeks) //indeks karşılaştırmanın başlayacağı indekstir.
if(deger1.startsWith(“abc”, 1) {}
Burada deger1 “abc” metninin birinci indeksinden sonrası ile başlıyorsa yani ikinci harften başlıyorsa (“bc”) metot true döner.

public boolean endsWith()
Bu metot ise startsWith() metosunun zıttı yönde karşılaştırma yapar, yani eğer bir nesne belirtilen nesne ile bitiyorsa true döner.
if(“alfabe”.endsWith(“be”)){//Bu metos true döner}

public int indexOf(String str)

Bu metot karşılaştırmayı nesne içinde argümanımızı arayarak yapar ve eğer nesnenin içinde argüman nesnemiz varsa bulduğu ilk uyan kısmın başlangıç indeksini Int olarak döner.
Ör; Int indeks = “yemek”.indexOf(“e”);indeks burada 1 olarak dönecektir.
Metot sadece argümanımızın ilk indeksini döner, birden fazla ise diğerlerini dönmez. İkinci indeksi de
indexOf(String str, int baslamaIndeksi) şeklinde bir kullanımla bulabiliriz. Burada baslamaIndeksi yerine aramanın başlaması istenen indeks değeri yazılır. Bunu baslamaIndeksi = indeks + argümanın uzunluğu şeklinde yaparsak metdo argümanımızın nesne içindeki sonraki konumunu dönecektir.
Metodun güzel bir yanı istediğimiz bir metnin diğer bir metin içinde herhangi bir yerde olup olmadığını kontrol edebilmemizdir. Bu metot ile aradığımız metnin diğerinin başında veya sonunda olması veya konumunu belirtmemiz gerekmez. Bunu yapabilmemizi sağlayan şey metodun sonucunun bir Int dönmesidir. Metnimiz içinde argüman olarak belirttiğimiz metin yok ise bu metot Int değeri olarak -1 döner.

public int lastIndexOf(String str)

Bu metot ile de indexOf() metodunun tersi yönde argümanımızın nesnemiz içindeki son indeksini alırız. lastIndexOf(String str, int baslamaIndeksi) şeklinde kullanarak da aramanın nerede başlayacağını belirtiriz.

Bunlardan başka bir de şu kullanım da vardır;
if(str 1 == str2) {}
Burada eğer str1 ve str2 aynı nesne ise true döner, değerleri farklı (Ör; str1 = “ab”, str2 = “a” + “b”)ise false döner.
equals() metodunda ise nesneler farklı olabilir ama değerleri aynı ise true döner.

Bunlar Java programlama dilinde kullanabileceğimiz genel String karşılaştırma metodlarıdır. Java sınıflamasına göre (, , J2EE veya Java ME, Java SE, Java EE gibi) bunlardan başka metodlarda var olabilir veya yeni sürümlerde olacaktır ama ben genelde en çok kullanılanları olduğu için bunlarla yetindim. Bunları kullanarak Java ile birçok şey yapmak mümkün, bir sözlük uygulaması, bir smiley kodu bulunduğunda yerine bir grafik simge koyacak bir anlık ileti programı…

Özetle, compareTo() metodu ile String nesneleri sözlük sıralamalarına göre artı veya eksi Int döner. equals() ise sadece iki değer birbirine eşitse true döndüğünden basit karşılaştırma işlemlerinde (sözlük sıralaması ile ilgili durumlar hariç) compareTo yerine kullanımı, daha performanslı olabilir. regionMatches(), startsWith() ve endsWith() metodları da argümanımızın belirttiğimiz yerde olup olmadığını kontrol ederken, indexOf() argümanımızın ilk indeksini ve lastIndexOf() da son indeksini döner. Bunlar da birbirleriyle ilişki içinde çok farklı şekillerde kullanılabilirler.