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 deerin String i癟indeki konumu yani indeksi al覺n覺r.

rnein; “Ne mutlu T羹rk羹m diyene!” c羹mlesinden bir par癟a alaca覺z.

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

Eer metin i癟inden alaca覺m覺z k覺s覺m belirli bir noktada bal覺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 vereceiz. rnein; 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.

Eer nesnemiz i癟inden alaca覺m覺z k覺s覺m belirli bir yerde balay覺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 balay覺p bittii indeksleri vereceiz. rnein “T羹rk羹m” kelimesini alaca覺z. Bu durumda kodumuz;

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

Ne yaz覺k ki 癟ou zaman 繹rneimizdeki gibi hangi karakterin veya yaz覺n覺n hangi konumda olaca覺n覺 bilemeyiz. Bu durumda devreye indexOf() adl覺 metot girer. Bu metot nesnemiz i癟indeki belirlediimiz string ya da char deerinin indeksini yani konumunu bize int olarak d繹ner.

indexOf(int karakter) ile nesnemiz i癟indeki bir karakterin indeksini al覺r覺z. rnein; 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 balamas覺n覺 istediimiz bir noktadan sonraki indeksini d繹ner. Bu bize 繹rnein uzun metinler i癟inde kelime ararken veya metni herhangi bir ite kullanmak i癟in ayr覺t覺r覺rken iimize yarar. Kontrol羹m羹z羹 yukar覺daki metot ile ald覺覺m覺z indeksten sonras覺na devam ettirebiliriz. rnein; yukar覺da T harfinin indeksini ald覺ktan sonra “T羹rk羹m” s繹zc羹羹n羹 alabilmek i癟in takip eden boluun indeksini almal覺 ya da m harfinin indeksinin bir fazlas覺n覺 almal覺y覺z. rnekte boluktan alal覺m:

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

indexOf(String str) bize istediimiz bir yaz覺n覺n nesnemiz i癟inde nereden balad覺覺n覺 繹renmemizi salar. r; mutlu s繹zc羹羹 i癟in 癟繹yle bir metot yazar覺z:

int indeks = cumle.substrintg(“mutlu”); //mutlu kelimesinin balad覺覺 indeks d繹ner

indexOf(String str, int baslama_indeksi) bize istediimiz yaz覺n覺n metnimiz i癟inde istediimiz 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 belirttiimiz yaz覺y覺 metin i癟inde batan aramaya balar ve b繹ylece ilk 繹nlerine gelen eitlii bize sunarlar. lastIndexOf() ise aramay覺 sondan balat覺r ve sondan baa doru kar覺lat覺覺 ilk indeksi bize d繹ner.

rnein 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 baa doru yap覺l覺r. Yani yukar覺daki balama indeksi olarak girdiimiz say覺lar metin i癟inde eitliin daha sonraki indeksini veriyor. Buna dikkat etmeli, lastIndexOf() kullan覺ld覺覺nda balama indeksi her zaman sonu癟 olarak d繹necek indeksten b羹y羹k olacak yani.

Can al覺c覺 bir nokta!

Peki eer metnimiz i癟inde bizim arad覺覺m覺z kelime yok ise, yani string nesnesi i癟inde bizim indeksini 繹renmek istediimiz deer yoksa ne olur. Eer varsa bu metotlar bize o deerin indeksini 0 veya pozitif bir say覺 olarak d繹ner. Eer yoksa ise bize sadece int deeri 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 deerin olup olmad覺覺n覺 kontrol etmek i癟in iimize yar覺yor. Eer metnimiz i癟inde istediimiz deer varsa -1 d繹nmeyecektir fikrinden 繹yle birey yapabiliriz:

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

Not: Yukar覺daki indeks deerlerini yazarken bir IDE falan kullanmad覺m sadece kendim sayd覺m, hata yapt覺覺m olmu olabilir, uyarabilirsiniz.