Java’da substring ve indexOf

____________________________________________________________________

Substring() Java’da String sınıfından bir nesne içinden belirli bir kısmını almak için kullanılan metottur, indexOf() ile de belirli bir değerin String içindeki konumu yani indeksi alınır.

Örneğin; “Ne mutlu Türküm diyene!” cümlesinden bir parça alacağız.

String cumle = “Ne mutlu Türküm diyene!”;

Eğer metin içinden alacağımız kısım belirli bir noktada başlıyor ve sona kadar gidiyorsa metot şu şekilde olacak:

substring(int indeks);

Yani alacağımız kısmın nesne içindeki indeksini substring() yöntemine vereceğiz. Örneğin; cümlemizden Türküm diyene kısmını alacağız. Önce Türküm kelimesinin ilk karakterinin indeksini alırız yani sayarız. Sayarken ilk karakterin (N) önüne 0 koyar, sonrasına da 1 koyup bunu bu şekilde arttırırız. Yani N’nin indeksi 0 olur. Bu şekilde saydığımızda T harfinin indeksi dokuzdur. Bu durumda metodumuz da şöyledir:

String substring = cumle.substring(9); // “Türküm diyene!” dönecektir.

Eğer nesnemiz içinden alacağımız kısım belirli bir yerde başlayıp string sona gelmeden bitiyorsa bu durumda da yazacağımız metot şöyledir:

substring(int baslama_indeksi, int bitis_indeksi);

Yani metoda alacağımız kısmın başlayıp bittiği indeksleri vereceğiz. Örneğin “Türküm” kelimesini alacağız. Bu durumda kodumuz;

String substring = cumle.substring(9, 15); // “Türküm” dönecektir.

Ne yazık ki çoğu zaman örneğimizdeki gibi hangi karakterin veya yazının hangi konumda olacağını bilemeyiz. Bu durumda devreye indexOf() adlı metot girer. Bu metot nesnemiz içindeki belirlediğimiz string ya da char değerinin indeksini yani konumunu bize int olarak döner.

indexOf(int karakter) ile nesnemiz içindeki bir karakterin indeksini alırız. Örneğin; cumle nesnemizden T harfinin indeksini alacağız, metot şöyle olur:

int indeks = cumle.indexOf(“T”);

Bu da bize 9 döner.

indexOf(int karakter, int baslama_indeksi) bize karakterimizin başlamasını istediğimiz bir noktadan sonraki indeksini döner. Bu bize örneğin uzun metinler içinde kelime  ararken veya metni herhangi bir işte kullanmak için ayrıştırırken işimize yarar. Kontrolümüzü yukarıdaki metot ile aldığımız indeksten sonrasına devam ettirebiliriz. Örneğin; yukarıda T harfinin indeksini aldıktan sonra “Türküm” sözcüğünü alabilmek için takip eden boşluğun indeksini almalı ya da m harfinin indeksinin bir fazlasını almalıyız. Örnekte boşluktan alalım:

int index = cumle.substring(” “, 9); //Bu bize “Türküm” dönecektir.

indexOf(String str) bize istediğimiz bir yazının nesnemiz içinde nereden başladığını öğrenmemizi sağlar. Ör; mutlu sözcüğü için çöyle bir metot yazarız:

int indeks = cumle.substrintg(“mutlu”); //mutlu kelimesinin başladığı indeks döner

indexOf(String str, int baslama_indeksi) bize istediğimiz yazının metnimiz içinde istediğimiz bir noktadan sonraki indeksini verir. Ör; “diyene” indeksini alacağız.

int indeks = cumle.indexOf(“diyene”, 3); //3 indeksinden sonraki “diyene” kelimesinin indeksini döner.

lastIndexOf() ise yukarıdaki metotların bir farkla aynısıdır, yukarıdakiler belirttiğimiz yazıyı metin içinde baştan aramaya başlar ve böylece ilk önlerine gelen eşitliği bize sunarlar. lastIndexOf() ise aramayı sondan başlatır ve sondan başa doğru karşılaştığı ilk indeksi bize döner.

Örneğin yukarıdaki cümlemizde m harfi için indexOf ve lastIndexOf şunları dönerler;

int ilkmindeksi= cumle.indexOf(“m”); // 3 dönecektir

int sonmindeksi = cumle.lastIndexOf(“m”); //14 dönecektir

indexOf() için geçerli olan tüm metot yapıları lastIndexOf() için de geçerlidir, sadece arama sondan başa doğru yapılır. Yani yukarıdaki başlama indeksi olarak girdiğimiz sayılar metin içinde eşitliğin daha sonraki indeksini veriyor. Buna dikkat etmeli, lastIndexOf() kullanıldığında başlama indeksi her zaman sonuç olarak dönecek indeksten büyük olacak yani.

Can alıcı bir nokta!

Peki eğer metnimiz içinde bizim aradığımız kelime yok ise, yani string nesnesi içinde bizim indeksini öğrenmek istediğimiz değer yoksa ne olur. Eğer varsa bu metotlar bize o değerin indeksini 0 veya pozitif bir sayı olarak döner. Eğer yoksa ise bize sadece int değeri olarak -1 döner. Yani:

int zindeksi = cumle.indexOf(“z”) == -1 olur, çünkü z harfi cümlemizde yok.

Bu özellikle bir metnin içinde bir karakter veya kelime gibi bir değerin olup olmadığını kontrol etmek için işimize yarıyor. Eğer metnimiz içinde istediğimiz değer varsa -1 dönmeyecektir fikrinden şöyle birşey yapabiliriz:

if (cumle.indexOf(“n”) != -1)
{
System.out.println(“Cümlemiz içinde n harfi vardır!”);
}

Not: Yukarıdaki indeks değerlerini yazarken bir IDE falan kullanmadım sadece kendim saydım, hata yaptığım olmuş olabilir, uyarabilirsiniz.