Java String Sınıfı Metotları – indexOf ve lastIndexOf

indexOf();


String sınıfından türetilmiş bir metin (dize) içerisinde aradığımız tek bir karakter yada karakter bloğunun ilk bulunduğu pozisyonu, yani dizin başlangıç numarasını (indeks / indis) tam sayı değeri olarak verir. Aramaya 0. dizin numarasından, yani dizenin sol başından başlar, sonuna doğru devam eder. Dize içerisinde aranan karakter yada karakter bloğu birden çok sayıda olsa da, ilk bulduğunun indeksini döndürür. Dize içerisinde aranan karakter veya karakter bloğu yoksa -1 tam sayı değerini döndürür. Büyük/küçük harf duyarlıdır.

Not: Dize içerisinde bulunan öğelerin konumunu temsil eden dizin numarası, indeks (index) ya da indis olarak da adlandırılır ve çoğu programlama dilinde 0’dan başlar.

indexOf metodu, girilen argümanlara göre farklı şekillerde kullanılabilir. Bunlar;

  • Tek argüman ile kullanım,
    • indexOf(char ch);
    • indexOf(int ch);
    • indexOf(String str);
  • Çift argüman ile kullanım,
    • indexOf(char ch, int fromIndex);
    • indexOf(int ch, int fromIndex);
    • indexOf(String str, int fromIndex);

Java String – indexOf Örnekleri

dizin no örnek görsel
* Alttaki tüm örneklerde kullanılacak dizeyi oluşturan karakterlerin dizin (indeks) numaraları.
public static void main(String[] args){

    String metin = "Tam Weblik Java!";
    System.out.println(metin.indexOf('a'));

    /*
      Program çıktısı: 1
      'a' karakterini aramaya sol baştan başlar,
      'a' karakterinin dizin numarası olan 1 değerini döndürür.
      'a' karakteri 12. ve 14. indislerde de mevcuttur fakat
      indexOf ilk bulduğu 'a' karakterinin indeksini döndürür.
    */
}

indexOf metodu, kendisine iletilen “int” tipinde bir argüman ile kullanılabilir. Argüman olarak girilen tamsayı, karakterin Unicode onluk sistemdeki (decimal) tamsayı değerini temsil eder. Alttaki örnekte ‘W’ karakterinin dizin numarasını bulmak için, ‘W’ karakterinin Unicode onluk sistemde karşılığı olan 87 tamsayısı kullanılmıştır.

public static void main(String[] args){

    String metin = "Tam Weblik Java!";
    System.out.println(metin.indexOf(87));

    /*
      Program çıktısı: 4
      Argüman olarak girilen 87 = Unicode 'W' (büyük harf)
      'W' harfini (karakterini) aramaya sol baştan başlar,
      'W' harfinin dizin numarası olan 4 değerini döndürür.
    */
}

indexOf metodu, kendisine iletilen “String” tipinde bir argüman ile kullanılabilir. Argüman olarak girilen alt dize metinde mevcutsa, alt dizenin ilk karakterinin dizin numarasını döndürür. Mevcut değilse -1 tamsayı değerini döndürür.

public static void main(String[] args){

    String metin = "Tam Weblik Java!";
    System.out.println(metin.indexOf("Web"));

    /*
      Program çıktısı: 4
      "Web" alt dizesini aramaya sol baştan başlar,
      "Web" alt dizesinin başlangıç dizin numarası olan 4 değerini döndürür.
    */
}

indexOf metodu, kendisine iletilen “char”, “int” veya “String” tipindeki argümana ek olarak, “int” tipinde ikinci bir argüman ile de kullanılabilir. Girilen ilk argüman aranan karakteri veya dizeyi, 2. argüman da (fromIndex) aramanın başlatılacağı (ilk bakılacak olan) dizin numarasını temsil eder.

public static void main(String[] args){

    String metin = "Tam Weblik Java!";

    System.out.println(metin.indexOf('a', 2));
    /*
      Program çıktısı: 11       
      'a' karakterini aramaya 2. indisten başlar,
      'a' karakterinin dizin numarası olan 12 değerini döndürür.
    */

    System.out.println(metin.indexOf('e', 4));
    /*
      Program çıktısı: 5       
      'e' karakterini aramaya 4. indisten başlar,
      'e' karakterinin dizin numarası olan 5 değerini döndürür.
    */

    System.out.println(metin.indexOf("Web", 5));
    /*
      Program çıktısı: -1       
      "Web" alt dizesini aramaya 5. indisten başlar,
      5. indisten itibaren sona kadar "Web" alt dizesi
      olmadığından -1 değerini döndürür.
    */
}

lastIndexOf();


String sınıfından türetilmiş bir metin (dize) içerisinde aradığımız tek bir karakter yada karakter bloğunun en son bulunduğu pozisyonu (dizin numarası / indeks / indis) tam sayı değeri olarak verir. Aramaya dizenin son karakterinden başlar ve başa (ilk karaktere) doğru devam eder. Dize içerisinde aranan karakter yada karakter bloğu birden çok sayıda olsa da, ilk bulduğunun indeksini döndürür. Dolayısıyla lastIndexOf metodunda arama sondan geriye doğru yapıldığından, birden çok eşleşme durumunda döndürülecek değer; bulunan en büyük indeks numarası olacaktır. Dize içerisinde aranan karakter veya karakter bloğu yoksa -1 tam sayı değerini döndürür. Büyük/küçük harf duyarlıdır.

Özetle indexOf metodunda arama baştan sona doğru yapılırken, lastIndexOf metodunda sondan başa doğru yapılır.

lastIndexOf metodu, girilen argümanlara göre farklı şekillerde kullanılabilir. Bunlar;

  • Tek argüman ile kullanım,
    • lastIndexOf(char ch);
    • lastIndexOf(int ch);
    • lastIndexOf(String str);
  • Çift argüman ile kullanım,
    • lastIndexOf(char ch, int fromIndex);
    • lastIndexOf(int ch, int fromIndex);
    • lastIndexOf(String str, int fromIndex);
public static void main(String[] args){

    String metin = "Tam Weblik Java!";
    System.out.println(metin.lastIndexOf('a'));

    /*
      Program çıktısı: 14
      'a' karakterini aramaya en sondan başlar,
      'a' karakterinin dizin numarası olan 14 değerini döndürür.
      'a' karakteri 12. ve 2. indislerde de mevcuttur fakat
      lastIndexOf sondan başa doğru ilk bulduğu 'a'
      karakterinin indeksi olan 14 tamsayı değerini döndürür.
    */
}

lastIndexOf metodu, aynı indexOf metodunda olduğu gibi kendisine iletilen “char”, “int” veya “String” tipindeki argümana ek olarak, “int” tipinde ikinci bir argüman ile de kullanılabilir. Girilen ilk argüman aranan karakteri veya dizeyi, 2. argüman da (fromIndex) aramanın başlatılacağı (ilk bakılacak olan) dizin numarasını temsil eder.

public static void main(String[] args){

    String metin = "Tam Weblik Java!";
    System.out.println(metin.lastIndexOf('a', 13));

    /*
      Program çıktısı: 12
      'a' karakterini aramaya 13. indeksten başlar,
      'a' karakterinin dizin numarası olan 12 değerini döndürür.
      'a' karakteri 14. ve 2. indislerde de mevcuttur fakat
      lastIndexOf kendisine iletilen 2. argüman olan arama başlangıç
      indeksinden (örnekte 13) geriye doğru ilk bulduğu 'a'
      karakterinin indeksi olan 12 tamsayı değerini döndürür.
    */
}

indexOf ve lastIndexOf metotlarına arama başlangıç indeksi için negatif bir değer girildiğinde ne olur?


Bu durum indexOf için negatif değeri 0′ a eşitlemek demektir ve başlangıç değeri girilmemiş kullanım ile aynı sonucu verecektir. yani indexOf(‘a’, -10) şeklindeki kullanım, indexOf(‘a’, 0) veya indexOf(‘a’) ile aynı sonucu üretir. Kısaca indexOf metoduna negatif başlangıç değeri girildiğinde arama 0. indeksten başlar.

lastIndexOf için ise durum biraz farklıdır. Şöyle ki lastIndexOf metodu, kendisine girilen başlangıç değeri (fromIndex) ile, dizenin sonuncu elemanının indeksini (dize uzunluğu – 1) karşılaştırır ve hangisi küçük ise onu arama başlangıç değeri olarak kullanır. Bu durumda da lastIndexOf(‘a’, -10) şeklindeki bir kullanımda, başlangıç indeksi olarak -10 kabul edilecek ve herhangi bir arama yapılamayacağından kodumuz hep -1 değerini döndürecektir. Kısaca lastIndexOf metoduna negatif başlangıç değeri girildiğinde her zaman -1 değeri döndürülür.

Umarım bu anlatım, indexOf ve lastIndexOf metotlarının kullanımlarına dair açıklayıcı bir rehber olmuştur. Bu metotları projelerinizde kullanarak, metin işleme ihtiyaçlarınıza hızlı ve verimli bir şekilde çözüm üretebilirsiniz.

Paylaşmak güzeldir...

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir