Bir bilgisayar mühendisi için programlama dili, öğrendiklerini sınadığı, deneyler yaptığı bir laboratuardır ve mühendisler deneylerini, kestiremedikleri sonuçları gözlemlemek için değil, öngördükleri sonuçları doğrulamak için yaparlar...
String.split() ve Dinamik Diziler
Split fonksiyonuna neredeyse her dilde rastlayabilirsiniz. Basittir, ama çok iyi iş görür. Buna rağmen J2ME String kütüphanesinde bu fonksiyona rastlayamadığıma şaşırdım. Basitçe oluşturulabilecek olsa da bulunmaması eksiklik...
Bu fonksiyonu oluşturmak için gerekli olduğu düşünülecek ilk şey dinamik bir dizi. Ancak J2ME, bir dizinin boyutunu içeriği koruyarak direkt olarak değiştiremiyor. Sanırım akla ilk gelecek yöntem, her eleman eklenmek istendiğinde mevcut dizinin eleman sayısının 1 fazlası kadar elemana sahip yeni bir dizi açıp önceki dizinin elemanlarını yeni diziye kopyalama yöntemi olur, ama bu şekilde gereksiz yere sürekli kopyalama yapılmış oluyor. Bu amaca uygun olabilecek kullanışlı iki sınıf var aslında; Hashtable ve Vector sınıfları. Hastablelar bizim ihtiyaç duymayacağımız "anahtar" veriler tutuyor. Oysa bizim anahtarlarımız indislerimiz olmalı. Vectorlerde ise indis girilerek istenen sıradaki elemana ulaşılabiliyor. Ayrıca vector sınıfında, vektörlerin elemanlarının diziye kopyalanmasını sağlayan bir fonksiyon da bulunuyor. O zaman dinamik dizi ihtiyacımızı karşılayacak olan sınıf Vector sınıfı...
private String[] parcala(String butun, String ayirac)
{
int ayiracUzunlugu = ayirac.length();
int konum=-ayiracUzunlugu; //İlk adım için
int oncekiKonum; //Ayıracın onceki konumu
Vector parcalar = new Vector();
while(true)
{
oncekiKonum=konum+ayiracUzunlugu; //Ayıraç parçalara dahil değil
konum=butun.indexOf(ayirac, oncekiKonum);
if(konum<0)
{
parcalar.addElement(butun.substring(oncekiKonum, butun.length()));
break;
}
parcalar.addElement(butun.substring(oncekiKonum, konum));
}
String[] donecek=new String[parcalar.size()];
parcalar.copyInto(donecek);
return donecek;
}
Örnek:
private Form frm=new Form("Anaform");
public void startApp() { //MIDlet.startApp() implementasyonu...
//Diyelim ki sunucudan istekte bulunduk ve böyle bir bilgi döndü:
String donenYanit="00000<ayir>Hüseyin ATASOY<ayir>100";
String[] parcalar = parcala(donenYanit,"<ayir>");
String formaYazilacak = "NUMARASI: " + parcalar[0]+"\n"+
"ADI: " + parcalar[1]+"\n"+
"NOTU: " + parcalar[2]+"\n";
frm.append(new StringItem(null, formaYazilacak));
Display.getDisplay(this).setCurrent(frm);
}
Yayınlanma Tarihi: 23 Ekim 2010 Cumartesi - 11:53
Anahtar Kelimeler: java me, j2me, split, string, parçalama, dizi, vektör
Yorumlar ( 2 )
Ali İlker#1
23/10/2010, 13:07
http://mobilepit.com/06/solution-stringtokenizer-in-j2me-javame-midlets.html adresindeki bilgiler doğrultusunda Split() yordamı ile değil de StringTokenizer sınıfı ile parçalama işlemini gerçekleştirebilirsin.
Hüseyin Atasoy#2
23/10/2010, 13:40
Normalde Java ME kütüphaneleri içinde bu işlevi gören bir fonksiyon yok. StringTokenizer Java SE kütüphanelerine ait bir sınıf. Ama verdiğin linkte olduğu gibi yazılıp sonradan eklenen sınıflar da var tabi ki. Benim yazdığım da öyle bir şey.
Yorum/Görüş Bildir