[Java]Kelime Ayıklayıcı
-
Herkese merhabalar , java - swing ile uğraşırken böyle basit düzeyde bir kelime ayıklamak ve saymak için bir gui yaptım.
Belki birilerinin işine yarar, belki kimsenin işine yaramaz :)
Değinmek istediğim noktalar :
1-Tekrar bir metin işlemi yapmak istenirse , program tekrar açılıp kapanması gerekiyor aksi halde , total word'e ekleme yapıyor.
2-Clear butonu koydum ne yapıp etsem de kelimeleri sıfırladım , herşeyi sıfırladım ama total değişkenini arkaplan da bir türlü sıfırlayamadıgım için en sonunda clear butonunu kaldırdım.
3-Sıkıntısı ve sormak istediğim olay ise şu , tasarımlar da textfield , label'ları nasıl aynı düzende yerleştiriyorsunuz? yani ben ne kadar uğraştıysam da en son program calıstıgın da yine milimetrik kaymalar oluyor , oranları nasıl ayarlıyorsunuz ? yani label'ları nasıl dümdüz yapabiliriz :)
4-JRE 1.0.0 sonra ki tüm JRE'lerde calısıyor o sıkıntı olmayabilir.
5-3milyon karaktere kadar test ettim. ( stack filanda denedim ama en hızlı sonucu array tipinde alabildim )
6-Uğraşılarak kelimeler bir pasta grafiği ya da bir eksen üzerinde grafik olarak en çok kullanılanı gösterilebilir gibi.GIF hali :
İndirmek isteyenler için :
http://dosya.co/q3gkvy8dirhg/frequency.exe.html
-
Kodları görürsek daha iyi olur. Decompile ettiğimde total word'ün neden düzgün çalışmadığını göremiyorum. Hatta total word değil de total char sanırım. Sözcükleri değil de harfleri saydırıyorsun olmalısın. Sözcükleri saydırmak apayrı bir iş:) Bu konuda regex'ten yararlanabilirsin (ya da sözcüğü bölen karakterleri saydırabilirsin. Bunlar \t, \r, \n, \x20, nokta, virgül, çift nokta, noktalı virgül, ", ' ... ya da harf olmayan şeylerin tamamı).
Üçüncü sorun için senin sıkıntın fontta olabilir. Courier gibi her harfin genişliği sabit bir font kullanırsan farkı göreceksin. Bir de parametrik olarak kullan. Kendin ver x ve y konumlarını.
-
2- total degiskenini nerde tutuyosun hocam ? sınıfın içinde property olarak tanımla,
class sinif {
public int total;
gibi
sonra this.total = 0; dersin sifirlanir
-
YeniHarman bunu yazdı
Kodları görürsek daha iyi olur. Decompile ettiğimde total word'ün neden düzgün çalışmadığını göremiyorum. Hatta total word değil de total char sanırım. Sözcükleri değil de harfleri saydırıyorsun olmalısın. Sözcükleri saydırmak apayrı bir iş:) Bu konuda regex'ten yararlanabilirsin (ya da sözcüğü bölen karakterleri saydırabilirsin. Bunlar \t, \r, \n, \x20, nokta, virgül, çift nokta, noktalı virgül, ", ' ... ya da harf olmayan şeylerin tamamı).
Üçüncü sorun için senin sıkıntın fontta olabilir. Courier gibi her harfin genişliği sabit bir font kullanırsan farkı göreceksin. Bir de parametrik olarak kullan. Kendin ver x ve y konumlarını.
// text değeri alınması ve char olarak işlemler text = textArea.getText(); try{ char ccc = text.charAt(0); } catch(java.lang.StringIndexOutOfBoundsException ex) { if(textArea.getText().equals("")) { JOptionPane.showMessageDialog(null, warning); } } char[] char_arr = text.toCharArray(); startTime = System.currentTimeMillis(); for(Character j : char_arr) { { } if(j.equals('a') || j.equals('A')) { a++; } if(j.equals('b') || j.equals('B')) { b++; }
// a lbl değerleri de şöyle değişiyor Albl.setText(Integer.toString(a)); Blbl.setText(Integer.toString(b)); Clbl.setText(Integer.toString(c));
Ana kodları yukarıda verdim sanırım , aslında dizeler ile de yapılabilirdi eşleştirmeli olarak diye düşünüyorum ama böyle uzun uzun yazdım açık olsun diye , ama dizeler ile de ugrasabilirim. Evet total word aslında karakterleri sayıyor :) yani şöyle a karakterini arıtıyorum , işlem bittigin de a değeri mesela 30 ' sa total = a+b+c+d+e gibi gidiyor. Her karakter sayısını ( a,b,c,d,e ) tek bir total değişkeninde topluyorum , en geniş sınıf içerisine public int total; dedigim de diğer buton içerisin de this. dedigim de total field'e ulasamıyorum
Teşekkür etmek istediğim konular : regex duydum ama ne iş yaptığını bilmiyordum arastırıyorum şimdi , Courier font'un her harfinin genişliğinin sabit oldugunu öğrendim , parametrik olarak kullanmak sanırım matematik'le alakalı ve en zayıf oldugum nokta matematik diyebilirim , çok teşekkür ederim.@yolbulucu : field olarak tanımlama yapsam da ' this. ' dediğimde field'e ulasamıyorum , acaba eclipse ıde'sin de sürekli alt alta olusturmasından dolayı sınıfların kapsam alanlarını mı karıstırıyorum ona bakacağım. " property " ilk defa duydum , araştırdım total değişkenini @getter @setter int total; olarak tanımladım ama yine olmadı , clear butonu içerisinde total'e ulasamıyorum. property'i araştırmam lazım , çok teşekkür ederim.
-
Roark bunu yazdıYeniHarman bunu yazdı
Kodları görürsek daha iyi olur. Decompile ettiğimde total word'ün neden düzgün çalışmadığını göremiyorum. Hatta total word değil de total char sanırım. Sözcükleri değil de harfleri saydırıyorsun olmalısın. Sözcükleri saydırmak apayrı bir iş:) Bu konuda regex'ten yararlanabilirsin (ya da sözcüğü bölen karakterleri saydırabilirsin. Bunlar \t, \r, \n, \x20, nokta, virgül, çift nokta, noktalı virgül, ", ' ... ya da harf olmayan şeylerin tamamı).
Üçüncü sorun için senin sıkıntın fontta olabilir. Courier gibi her harfin genişliği sabit bir font kullanırsan farkı göreceksin. Bir de parametrik olarak kullan. Kendin ver x ve y konumlarını.
// text değeri alınması ve char olarak işlemler text = textArea.getText(); try{ char ccc = text.charAt(0); } catch(java.lang.StringIndexOutOfBoundsException ex) { if(textArea.getText().equals("")) { JOptionPane.showMessageDialog(null, warning); } } char[] char_arr = text.toCharArray(); startTime = System.currentTimeMillis(); for(Character j : char_arr) { { } if(j.equals('a') || j.equals('A')) { a++; } if(j.equals('b') || j.equals('B')) { b++; }
// a lbl değerleri de şöyle değişiyor Albl.setText(Integer.toString(a)); Blbl.setText(Integer.toString(b)); Clbl.setText(Integer.toString(c));
Ana kodları yukarıda verdim sanırım , aslında dizeler ile de yapılabilirdi eşleştirmeli olarak diye düşünüyorum ama böyle uzun uzun yazdım açık olsun diye , ama dizeler ile de ugrasabilirim. Evet total word aslında karakterleri sayıyor :) yani şöyle a karakterini arıtıyorum , işlem bittigin de a değeri mesela 30 ' sa total = a+b+c+d+e gibi gidiyor. Her karakter sayısını ( a,b,c,d,e ) tek bir total değişkeninde topluyorum , en geniş sınıf içerisine public int total; dedigim de diğer buton içerisin de this. dedigim de total field'e ulasamıyorum
Teşekkür etmek istediğim konular : regex duydum ama ne iş yaptığını bilmiyordum arastırıyorum şimdi , Courier font'un her harfinin genişliğinin sabit oldugunu öğrendim , parametrik olarak kullanmak sanırım matematik'le alakalı ve en zayıf oldugum nokta matematik diyebilirim , çok teşekkür ederim.@yolbulucu : field olarak tanımlama yapsam da ' this. ' dediğimde field'e ulasamıyorum , acaba eclipse ıde'sin de sürekli alt alta olusturmasından dolayı sınıfların kapsam alanlarını mı karıstırıyorum ona bakacağım. " property " ilk defa duydum , araştırdım total değişkenini @getter @setter int total; olarak tanımladım ama yine olmadı , clear butonu içerisinde total'e ulasamıyorum. property'i araştırmam lazım , çok teşekkür ederim.
tum kodunu zipleyip atsana ? bir de eclipse degil netbeans kullanmani oneririm,
bu arada su sekilde yapabilirsin
org.springframework.util.StringUtils.countOccurrencesOf("uzun string", "i"); ->boyle bir sinif varmis
char lar ++ ile arttirabilirsin
char letter = 'a';
for(i=1;i < 28; i++){ //her harf icin bir tur atsin
org.springframework.util.StringUtils.countOccurrencesOf("uzun string", letter); //bu veriyi eklersin artik bi yerlere
letter++;
}