İçindekilerGirişİndex
YukarıİlkÖncekiSonraki YokSon
Geriİleri
Yazdır
Raşit Fidan
fidanras79@yahoo.com

Find-Replace (Bul-Değiştir) Dialog Kutusu Geliştirme

Merhabalar.Bu köşemdeki ilk yazım.Bugüne kadar pek yazmak istemeyişimin altında,gerçekte biraz geveze olsamda, hadi birşeyler söyle-yaz dendiğinde dili tutulanlardanım. Sonunda yapılan büyük(!) ısrarlara dayanamayarak, ben de diğer üstadlarımın yazdığı gibi pek yararlı(!?) şeyler yazayım bari, dedim.

Son bitirdiğim proje hakkında birşeylerden bahsedeyim. Muhteva'nın Find-Replace diyalog kutusu yapımı bendenize verilmişti.İleride belki siz de buna benzer bir şeyle uğraşırsanız karşılaştığım problemlerle karşılaşma olasılığınız olabilir.

Muhteva Find-Replace diyalog kutusunun seçenekler bölümünde "Büyük harf küçük harf eşleştir" seçeneği bir CheckBox'la sunulmuş.Bu CheckBox'ı seçtiğinizde istenen; aranan kelimenin büyük küçük harf ayırt ederek arama yapmasıdır.Bu zaten herhangi karmaşık işlem yapmadan bilgisayarın yaptığı en basit işlemden biridir,bire bir karşılaştırma yapma...Fakat bu kutucuk seçili olmadığında yani siz mesela "raşit" kelimesini büyük küçük harf ayırt etmeden aratmak isterseniz,Örneğin; "Raşit","RAŞİT","RaŞiT"... kelimeleri de büyük küçük ayırt etmeden bulunmak isteniyorsa ne olacak?

Bu noktada aklıma String sınıfının compareToIgnoreCase() metodu aklıma geldi. Bu metot bir başka String'i alıp harflerin büyük küçük oluşunu bakmaksızın karşılaştırma yapar ve bir boolean değer döndürür. Bu projeye başlamadan,en başından yaptığım plandı.Ama ufak bir sorun vardı.Ben zaten karşılaştırma yapacağım String'in index'ini arıyordum. Onu bulmadan nasıl bir karşılaştırma yapacaktım ki? Böylece bu yolun tıkalı olduğu ortaya çıkmış oldu.

Bu arada canım çok sıkılmıştı.Çalışmayı kesip Televole seyretmeye gittim.Daha sonra da yattım. Nasıl? nasıl? diye düşünürken aklıma müthiş bir fikir geldi.Hemen kalktım ve bilgisayarımı açtım. Aranacak kelimeyi ve TextPane'den alınacak String'i, String'in toLoverCase() veya toUpperCase(),metotlarıyla başka bir String'e çevirmek ve daha sonra String'i indexOf() veya lastIndexOf() metotlarıyla aratmak!...

toLoverCase() metodu bir String'in harflerini küçük harf yapar.toUpperCase()ise tam tersini yani büyük harf yapar. Bundan yararlanarak TextPane'deki "'Raşit','RAŞİT','RaŞiT'" kelimeleri "raşit" veya "RAŞİT" durumuna dönüşür ve problemin gerisi kolayca görüleceği gibi hemen aşılır.

Bundan başka Seçenekler kısmında birde "Tek başına kelime ara" diye bir seçenek de vardır. Bu seçenek seçildiğinde kelime tekbaşına yani birbaşka kelimenin içinde geçmeksizin bulunacak. Örneğin;"ali" kelimesini "salih" kelimesinin içinde bulmayacak. Tek başına,hiçbir kelimeye bitişmemiş, birleşmemiş olarak bulacak. Bunun için önce kelime bulunup sonra sağında ve solunda boşluk kontrolü yapılmak suretiyle arama yaptırılabilir.Peki kelimenin sağında veya solunda bir noktalama işareti varsa ne olacak? Cümlenin sonunda duran ve sağ tarafında bir nokta olan kelime de tek başına bulunacak kelimelerdendir. Bende bunun üzerine TextPane den alınacak String'e klavyede harf ve sayı dışında ne kadar noktalama işareti ve özel karekter varsa hepsini String'in replace() metodu ile boşluk karekterine çevirdim ve işin içinden sıyrıldım.

Bu yazdığım ilk ve son yazı da olabilir.Beni askere götürebilirler. Sağlıcakla kalın...

İçindekilerGirişİndex
YukarıİlkÖncekiSonraki YokSon
Geriİleri
Yazdır