Thursday, September 30, 2010

java.util.StringTokenizer

Java nın 3000 e yakın hazır sınıfından bir tanesi de StringTokenizer sınıfıdır. Bugün StringTokenizer sınıfının kullanımı ve bu sınıfa ait metodların ne işe yaradığını anlatmaya çalışacağım. StringTokenizer sınıfı herhangi bir metni belirlediğimiz herhangi bir kritere veya kriterlere göre parçalamak (parse etmek ,parsing) için kullanılır. Eğer herhangi bir kriter koymazsak bu durumda default olarak boşluk karakterine göre parçalama işlemi gerçekleştirilir ki bu işleme splitting denir.Parçalama işleminden sonra oluşan her bir parçaya Token denir.
Programming is Practise felsefesinden yola çıkarak bu sınıfın kullanımını kolayca anlayabileceğimiz basit bir program yazarak işe başlayalım.01 import java.util.StringTokenizer;

public class Practise { 
    public static void main(String[] args) {  
             String cumle1=”deniz gözlerinden alır sonsuzluğun haberini”;
             StringTokenizer st1 = new StringTokenizer(cumle1);
  
              while(st1.hasMoreTokens())
                   System.out.println(st1.nextToken());
               
               // 1.bölüm sonu
              String cumle2=”ben,sen,o,biz,,,siz”;
              StringTokenizer st2= new StringTokenizer(cumle2,”,”);
              while(st2.hasMoreTokens())
                     System.out.println(st2.nextToken());
         
             // 2.bölüm sonu
             String cumle3=”yıldızlara;uzanıp,hep-seni sordum?gece!yarılarında. ”
             String delims =”,;-!.”;
             StringTokenizer st3= new StringTokenizer(cumle3, delims);
             System.out.println(“\n Token sayısı=”+st3.countTokens());
 
            while (st3.hasMoreElements())
                   System.out.println(st3.nextToken());
            // 3.bölüm sonu
       }
  }


Programı bölüm bölüm inceleyecek olursak, ilk bölümde cumle1 stringini nasıl token lara ayırabileceğimizi görüyoruz.StringTokenizer tipinde bir st nesnesi oluşturuyoruz. Constructor parametre olarak sadece cumle1 stringini aldığından default olarak splitting işlemi yapacaktır yani boşluk karakterlerine göre token lara ayırma işlemi. Buna göre ilk bölümün çıktısı şu şekilde olmalıdır.

deniz
gözlerinden
alır
sonsuzluğun
haberini


İkinci bölümde, string içine bir kaç virgül ekleyerek oluşturduğumuz st2 nesnesinin yapıcısına cumle2 ve “,” stringlerini parametre olarak gönderiyoruz. Yapıcıya 2.parametre olarak gönderilen bu karaktere sınırlayıcı karakter (delimiter) adı verilir. Bu durumda cumle2 stringi “,” karakterinin görüldüğü her yerde token lara ayrılır. Çıktı şu şekilde olmalıdır.

ben
sen
o
biz
siz


Üçüncü bölümde, birden çok delimiter kullanılmak istenmiş ve bunlar karakter dizisi şeklinde bildirilmiştir.
StringTokenizer st3= new StringTokenizer(cumle3, delims); -kod satırının anlamı cumle3 stringini delims içindeki karakterlere göre token lara parçala- manasına gelmektedir.StringTokenizer oluşturduğu token ları bir dizi olarak değil ancak sırayla erişilebilecek bir enumaration type olarak döndürür. 3.bölümün çıktısı da aşağıdaki gibi olur.

Token sayısı=6
yıldızlara
uzanıp
hep
seni sordum?gece
yarılarında


Dikat edilirse, delims içinde boşluk karakteri ve “?” bulunmadığından dolayı
’seni sordum?gece’ tokenlara ayrılmamıştır.

hasMoreTokens(); boolean değer döndüren bir metoddur sırada token olup olmadığını kontrol eder
nextToken(); sıradaki token i döndürür
countTokens(); o anda kalan token sayısını verir.

Daha ayrıntılı bilgiler;
java-sun.com

Bu yazi asagidaki bloktan kopyalanmistir Levent Ozkan Hocamin elerine saglik 
http://www.leventozkan.com/?p=6

java.util.Scanner and java.util.Formatter

java.util.Scanner

Bilindiği gibi Scanner, bir veri kaynağından alınan verileri okumak için kullanılan oldukça gelişmiş bir Java sınıfıdır. Scanner, konsol üzerinden kullanıcıdan veri almanın yanında, herhangi bir dosya ile de çalışabilir. Sonuçta konsol ve dosya da birer veri kaynağıdır. Yapmamız gereken tek şey, Scanner nesnesini oluştururken dosya sistemi ile çalışacağımızı belirten uygun yapılandırıcıya (constructor) uygun nesneleri geçirmektir.

Scanner input = new Scanner(System.in);

Scanner input = new Scanner(new BufferedReader(new FileReader("c:\\e-mail.txt"))); 

java.util.Formatter 

Formatter sınıfı da, Scanner gibi benzer işlevler için tasarlanmıştır. Uygulama içerisindeki biçimlendirilmiş bir veriyi herhangi bir veri kaynağına yazdırmak için Formatter sınıfı kullanılabilir. Yine Formatter nesnesini oluştururken, hedef kaynağı bir dosya ile ilişkilendiren Java nesnesini parametre olarak geçirerek, dosya yazma işlemini tamamlayabiliriz.

Formatter output = new Formatter(new BufferedWriter(new FileWriter("c:\\e-mail.txt")));   

Simdi tanimi yaptigimiz bu iki sinif ile ilgili bir uygulama yapalim Asagidaki uygulamayi isterseniz platformda derleyip veriyi platformun consol'undanda ekleyebilirsiniz istersenizde cmd ile derlyip cmd consolu ilede ekleyebilirsiniz 

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Formatter;
import java.util.Scanner;

public class ScannerAndFormatterDemo {
       public static void main(String args[]){
            try {
// Consol'dan veri girmek icin Scanner sinfindan faydalanarak asagidaki islemleri yaptik
                    StringBuffer veri = new StringBuffer();
                    Scanner oku = new Scanner(System.in);
                    System.out.println("-------- Ogrenci Kaydi ---------");
                    System.out.println();
                    System.out.print("Isim : ");
                    veri.append(oku.next());
                    System.out.print("Soyad : ");
                    veri.append("\n" + oku.next());
                    System.out.print("Yas : ");
                    veri.append("\n" + oku.nextInt());
                    System.out.print("Bolum : ");
                    veri.append("\n" + oku.next());
                    System.out.print("Telefon : ");
                    veri.append("\n" + oku.next());
                    System.out.print("E-mail : ");
                    veri.append("\n" + oku.next());
// Yukarda Konsola girilen veriler su sekilde istenilen yere yazilmali
                    File yer = new File("c:\\OgrenciKaydi.txt");
                    Formatter yaz = new Formatter(new BufferedWriter(new FileWriter(yer, true)));
                    yaz.format("%s%n" , veri);
                    yaz.close();
// Yukarida Scanner sinifini kullanarak consola girilen veriyi okuduk simdi ise OgrenciKaydi.txt okuyalim
                   Scanner txtOku = new Scanner(yer);
                   while(txtOku.hasNext()){
                            System.out.println(txtOku.nextLine());
                   }
           } catch (Exception ex) {
                   ex.printStackTrace();
           }
     }
}



Bu konuyu yazarken tanilari Asagidaki siteden aldim Bu blogtaki yaziyida okumanizi oneririm
http://www.javablog.org/54-java-scanner-ve-formatter-siniflari-ile-dosya-islemleri 

Wednesday, September 29, 2010

Regex paketinle ilgili uygulamalar

public class EmailValidation {

// public static void main(String[] args)
// throws Exception {
//
//
// String input = "@sun.com";
// Pattern p = Pattern.compile("[^\\.]@");
// Matcher m = p.matcher(input);
// if (m.find()) {
// System.err.println("istenen sonuc");
// }else{
// System.out.println("Istenmeyen sounuc.....");
// }
//=========================================================================================


// String input = "@sun.com";
// Pattern p = Pattern.compile("^\\.|^\\@");
// Matcher m = p.matcher(input);
// if (m.find()) {
// System.err.println("Email addresses don't start with dots or @ signs.");
// }
//=========================================================================================
//Checks for email addresses that start with
//www. and prints a message if it does.
// String input = "www.selcukoglu@sun.com";
// Pattern p = Pattern.compile("^\\.|^\\@");
// Matcher m = p.matcher(input);
// p = Pattern.compile("^www\\.");
// m = p.matcher(input);
// if (m.find()) {
// System.out.println("Email addresses don't start with \"www.\", only web pages do.");
// }
//================================================================================
// String input = "www.selcukoglu@sun.com";
// Pattern p = Pattern.compile("^\\.|^\\@");
// Matcher m = p.matcher(input);
//
// p = Pattern.compile("[^A-Za-z0-9\\.\\@_\\-~#]+");
// m = p.matcher(input);
// StringBuffer sb = new StringBuffer();
// boolean result = m.find();
// boolean deletedIllegalChars = false;
//
// while (result) {
// deletedIllegalChars = true;
// m.appendReplacement(sb, "");
// result = m.find();
// }
//// // Add the last segment of input to the new String
// m.appendTail(sb);
//
// input = sb.toString();
//
// if (deletedIllegalChars) {
// System.out.println("It contained incorrect characters , such as spaces or commas.");
// }
// }
}

//===========================================
public class Main {

/**
* @param args the command line arguments
*/
// public static void main(String[] args) {
// Pattern p = Pattern.compile("a"); // the expression
// Matcher m = p.matcher("Abduladir Selcukoglu"); // the source
// while (m.find()) {
// System.out.print(m.start() + " ");
// }
// }

//========================================================================================

// public static void main(String args[]) throws Exception {
// String regex = "(?<=http://)\\S+"; // Pattern pattern = Pattern.compile(regex); // String icerik = "Deneme amacli bir yazi "; // icerik += "http://java.sun.com http://www.melihsakarya.com http://www.ayvalik.org bakalim bunlari yakalayabilecekmi "; // icerik += "milliyet deneme http://www.milliyet.com.tr/2008/12/10/ekonomi/?ver=60 iste ilk 11ler&ver=06 b alanı görmemeli"; // Matcher matcher = pattern.matcher(icerik); // while (matcher.find()) { // String msg = matcher.group(); // System.out.println(msg); // } // } //======================================================================================== // public static void main(String args[]) throws Exception { /////// Buarada , den sonraki karakterleri gormek icin kullanilir // String regex = "(?<= , )\\S+"; // Pattern pattern = Pattern.compile(regex); // String names = "Abdulkadir , Ertugrul , Rasim , Nazim , Murat"; // Matcher matcher = pattern.matcher(names); // while (matcher.find()) { // String msg = matcher.group(); // System.out.println(msg); // } // } //======================================================================================== // public static void main(String args[]) throws Exception { //////// Buarada ab harfi eyer varsa ab ile beraber ondan sonraki harfide yazdirmak icin kulanilir // String regex = "ab."; // Pattern pattern = Pattern.compile(regex); // String names = "abcabdabfabeabtbakabo"; // Matcher matcher = pattern.matcher(names); // while (matcher.find()) { // String msg = matcher.group(); // System.out.println(msg); // } // } //======================================================================================== // public static void main(String args[]) { ////// Burada ancak kucuk ve buyuk harflerin listesini veriyor // String regex = "[a-zA-Z]"; // Pattern pattern = Pattern.compile(regex); // String input ="agvajxjh33333333xbasxjksk5alxnlkxas7xmlkxlka9axklxnm"; // Matcher matcher =pattern.matcher(input); // String msg =""; // while(matcher.find()){ // msg += matcher.group(); // } // System.out.println(msg); // } //======================================================================================== // public static void main(String args[]) { //////// Burada at kelimesinden once a,b,c olanlari bulmak icin kullanilir // String regex = "[abc]at"; // Pattern pattern = Pattern.compile(regex); // String input ="cat-kat-yat-tak-sat-aat"; // Matcher matcher =pattern.matcher(input); // // while(matcher.find()){ // String msg = "I found the text \""+matcher.group()+"\" starting at index "+matcher.start()+" and ending at index "+matcher.end(); // System.out.println(msg); // } // // } //======================================================================================== // public static void main(String args[]) { ///////// Burada at kelimesinden once a,b,c harflerinin disinda bir harf carsa onlari goster // String regex = "[^abc]at"; // Pattern pattern = Pattern.compile(regex); // String input ="cat-kat-yat-tak-sat-aat"; // Matcher matcher =pattern.matcher(input); // // while(matcher.find()){ // String msg = "I found the text \""+matcher.group()+"\" starting at index "+matcher.start()+" and ending at index "+matcher.end(); // System.out.println(msg); // } // } //======================================================================================== // public static void main(String args[]) { ///////// Burada a ile k arasindaki harleri olani alir // String regex = "[a-k]"; // Pattern pattern = Pattern.compile(regex); // String input = "addasdsdlkcosdjiohciusuyyrtrd,;apo"; // Matcher matcher = pattern.matcher(input); // String msg = ""; // while (matcher.find()) { // msg += matcher.group(); // } // System.out.println(msg); // } //======================================================================================== // public static void main(String[] args) throws Exception { // // Create a pattern to match breaks // Pattern p = Pattern.compile("[,\\s]+"); // // Split input with the pattern // String[] result = p.split("one,two, three four , five"); // for (int i=0; i
private void initComponents() {

jTextField1 = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jLabel3 = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea2 = new javax.swing.JTextArea();
jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jLabel1.setText("Enter your regex:");

jLabel2.setText("Enter input string to search:");

jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);

jLabel3.setText("Result");

jTextArea2.setColumns(20);
jTextArea2.setRows(5);
jScrollPane2.setViewportView(jTextArea2);

jButton1.setText("Search");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 516, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 506, Short.MAX_VALUE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 410, Short.MAX_VALUE))
.addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton1))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addContainerGap(486, Short.MAX_VALUE))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton1)
.addGap(39, 39, 39)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 155, Short.MAX_VALUE)
.addContainerGap())
);

pack();
}//

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jTextArea2.setText("");

String regex = jTextField1.getText();
Pattern pattern = Pattern.compile(regex);
// String names = "Abdulkadir , Ertugrul , Rasim , Nazim , Murat";
String names = jTextArea1.getText();
Matcher matcher = pattern.matcher(names);
while (matcher.find()) {
String msg = "I found the text \""+matcher.group()+"\" starting at index "+matcher.start()+" and ending at index "+matcher.end();

jTextArea2.append(msg+"\n");
}

}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new RegexTestHarnessDemo().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextArea jTextArea2;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}

//========================================
public class EmailDemo {
public static void main(String args[]){
String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
Pattern pattern = Pattern.compile("((www\\.)\\S+)+([^\\.]@\\S+)+(\\.[a-z]\\S+)");
Matcher matcher = pattern.matcher(text);
while(matcher.find()){
System.out.println(matcher.group());
}
}
}

java.util.regex.Matcher and java.util.regex.Pattern

Hayirli gunler arkadaslar bugun java'da regex paketini inceliyecez. regex paketinin icinde 4 sinif var biri interface biri Exception dir biz kalan iki sinifi inceleyecez yani
  • java.util.regex.Pattern
  •  util.regex.Matcher
Bu siniflar ayrilmaz ikili gibi dusunun ben bunlari su sekilde aciklayacam diyelimki elimizde bir text var ve ben bu text icindeki yazilari istenilen bir kalip olusturacam ve bu text icinde bu kalba uygun olanlari anip okuyacam iste bu sekilde dusunlmelidir regex paketi burada kalip olustirmamizi Pattern sinifi sagliyor bu kalibi text ile karsilastirip uygun olanlari alamayida  Matcher sinifi sagliyor
kulanacagim birkac methodun ne ise yaradigini yaptigina bakalim gerye kalanlarida ileriki zamanda yazacam.
  • compile(String kalip) : Bu method araciligi ile istenilen kalip hazirlaniyor.
  •  matcher(CharSequence text) : Bu method sayasinde hazilanan kalip ile veriyi eslestirmeye yarar.
  •  find() : yazdigimiz kalip ile veri arasinda eslesme oluyorsa true olmuyorsa false dondurur.
  • group() : Bu ise kaliba uygun olanalari alir. 
Simdi bunu ile ilgili bir uygulama yapacam. Uygulamam su sekilde olacak benim elimde bir String degiskeni var ve bu Stringe bir cok email adresi yazmisim ve ben bu Stringteki email adreslerinin duzgun yazilmis olanlarini almak istiyorum yani benim kalibim bir email adresi www.---------@--------.com iste ben bu kalibi Pattern ile yapip Marcher yardimi ile emaillerin oldugu String'teki emaillar ile esleme yapacam. Uygulamayi adim adim yapacam ve sonra bu adimlari birlestirecem once bu emaillerimin www. uygun olanlarini sonra @ varmi sonraca .com varmi diye yoklayacam ve en son olarakta bunlarin hepsini bir uygulamada birlestirip istenilen uygulamayi elde edecem

Birinci Adim 

public class EmailDemo {
      public static void main(String args[]){ 
            String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
            Pattern pattern = Pattern.compile("www");
            Matcher matcher = pattern.matcher(text);
            while(matcher.find()){
                  System.out.println(matcher.group());
            }
     }
}
 
//Console Output
www
www
www
www
www
www

Burada www. noktayi almak icin \\. isareti kullanacam

public class EmailDemo {
       public static void main(String args[]){
            String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
            Pattern pattern = Pattern.compile("www\\.");
            Matcher matcher = pattern.matcher(text);
            while(matcher.find()){
                   System.out.println(matcher.group());
            }
      }
}
 
//Console Output
www.
www.
www.
www.
www.
www.

Simdide www. ile parcaladigim String degerlerin tamamini gormek icin \\S+isaretini kullanacam

public class EmailDemo {
      public static void main(String args[]){
           String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                  www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
           Pattern pattern = Pattern.compile("www\\.\\S+");
           Matcher matcher = pattern.matcher(text);
           while(matcher.find()){
                  System.out.println(matcher.group());
           }
      }
}
//Console Output 
www.aslan.@hotmail.com
www.imanov@.com
www.memedov@hotmail.
www.tagiyev@hotmail.com
www.xaspoladov@hotmail.com

Boylece birinci adim tamamlandi ve dikkat ediyorsaniz bu kaliba uymuyanlar yazilmadi mesela wwwselcukoglu@hotmail. 'da www dan sonra nokta olmadigi icin bu kaliba uymadi ve eslestirme sirasinda alinmadi.

Ikinci Adim 
@ isaretinin var olup olamadigi ve @ once nokta olmamasini inceliyelim

public class EmailDemo {
      public static void main(String args[]){
            String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
            Pattern pattern = Pattern.compile("[^\\.]@\\S+");
            Matcher matcher = pattern.matcher(text);
            while(matcher.find()){
            System.out.println(matcher.group());
            }
      }
}

//Console Output
u@hotmail.com
v@.com
v@hotmail.
v@hotmail.com
v@hotmail.com

Burada \\. isret nokta manasinda ve su isaret ise ^ nokta olmayanlar manasina gelir bu olamayanlardan kasit sadece nokta degil istenilen isaretten once ^ bunu koyunce o isret olmayana bakar. ve dikkatle bakarsaniz www.aslan.@hotmail adresinde @ once nokta oldugu icin buda eslestirilme sirasinda alinmadi.

Ucuncu Adim 
@------.com seklinde olmasi yani @ten sonra yazi olmali sonra nokta ve sonrada tekrar yazi seklide simdi bunun kalibini olusturalim

public class EmailDemo {
         public static void main(String args[]){
                String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
                Pattern pattern = Pattern.compile("@\\S+\\.[a-z]\\S+");
                Matcher matcher = pattern.matcher(text);
                while(matcher.find()){
                     System.out.println(matcher.group());
                }
        }
}
//Console Output
@hotmail.com
@hotmail.com
@hotmail.com
@hotmail.com

Buradada uymayanlar yine alinmadi mesela www.imanov@.com noktadan once bir yazi olmadigi icin buda alinmadi

Simdi bu yaptiklarimi birlestirince uygulamayi tamalamis oluruz.

public class EmailDemo {
        public static void main(String args[]){
              String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
              Pattern pattern = Pattern.compile("((www\\.)\\S+)+([^\\.]@\\S+)+(\\.[a-z]\\S+)");
              Matcher matcher = pattern.matcher(text);
              while(matcher.find()){
                     System.out.println(matcher.group());
              }
       }
}
//Console Output
www.tagiyev@hotmail.com
www.xaspoladov@hotmail.com

Tuesday, September 28, 2010

java.io.Serializable

Java tamamen nesne yönelimli bir programlama dili olduğu için, Java üzerinde uygulama geliştirirken nesneleri sıkça kullanıyoruz. Java platformunda bilindiği gibi, int, double, byte gibi primitive tipler dışındaki herşey nesnedir.

Ancak Java’da kullanılan nesneler, Java platformunda (JVM) hayat bulurlar. Platform dışında nesnelerin, hiçbir anlamı yoktur. Nesne yönelimli programlama paradigmasını destekleyen Java’da, tasarlanan nesnelerin tekrar kullanılabilmesi (reuse) önemli bir konu olduğuna göre, bu nesneleri Java platformu dışında da hayata geçirmek gerçekten önemlidir. Bahsedilen bu problem, Java Serialization API sayesinde çok kolay bir şekilde aşılabiliyor.

Konuya bir de şu yönden bakarsak, herhangi bir nesne içerisindeki fieldları bir dosyaya yazdırdığımızda, bu verilerin sadece değerlerini (values) dosya içerisinde depolarız. Halbuki bu verilerin sınıf tanımlaması içerisindeki tipleri de en az değerleri kadar önemlidir. Herhangi bir nesnenin fieldındaki değer 3 ise, bu değerin string mi int mi olduğunun dosya üzerinde bir anlamı yoktur.

Java Serialization API sayesinde bir nesnenin birebir kopyasını, Java platformu dışında da depolayabiliriz. Bu mekanizma ile daha sonra, nesneyi depolanan yerden çekip, aynı durum (state) ve özellikleri ile kullanmaya devam edebiliriz. Tüm bu sisteme, Object Serialization (Nesne Serileştirme) adı verilir.

Object Serialization Temelleri

Nesneleri serileştirmek için yapılması gereken tek şey, serileştirilecek nesnemizin serileştirilebilir (serializable) olduğunu tagging interface sayesinde sınıf deklarasyonunun başında belirtmek.

Peki, tagging interface tam olarak nedir? Tagging Interface, basit bir Java interfaceidir. Özelliği, içerisinde herhangi bir method tanımlaması yapmaz. Sadece belirli işlerin, belirli nesneler tarafından yapılabilmesi için sınıflara bazı standartlar oluşturmak için tasarlanmıştır. Nesne serileştirme işleminde de yapmamız gereken tek şey Serializable adındaki tagging interface i, serileştirilecek olan nesnenin sınıf deklarasyonunda ya da kalıtım ile türediği sınıfın bu interfacei uygulaması gerekmektedir. (implement edilmesi)

Nesneleri serileştirmek için Java platformu 2 temel sınıf sunar. ObjectInputStream ve ObjectOutputStream adı verilen bu iki sınıf ile, Serializable interfaceini uygulayan herhangi bir sınıfı serileştirebiliriz. Bu iki sınıfdan ilki olan ObjectInputStream, ObjectInput interfaceini uygular ve serileştrilen nesneyi tekrar akışdan okumak için kullanılır. ObjectInputStream adındaki diğer sınıf, ObjectOutput interfaceini uygular ve herhangi bir nesneyi akışa yazdırmak için kullanılır.

ObjectInput interfacei, readObject adında bir method sunar ve serileştirilen nesneyi akışdan okumak için kullanılır. Yine aynı şekilde ObjectOutput interfacei, writeObject adında bir method sunar ve bu method sayesinde Serializable interfaceini uygulayan herhangi bir nesneyi herhangi bir akışa yazdırabiliriz. Bu iki interfacei sırasıyla uygulayan ObjectInputStream ve ObjectOutputStream sınıfları bu methodları kendi içinde tanımlayarak, kullanıma hazırlar.

Bu iki sınıfı kullanmak çok basittir. Serileştirilecek ve geri çekilecek nesneler eğer dosyalar üzerinde yapılacaksa, bu iki sınıfa dosyaya yazdırmak için java.io paketince sunulan FileInputStream veya FileOutputStream nesnelerini geçirmek yeterlidir.


NonSerializable Objects

Buraya kadar nesnelerin neden serileştirilmesi gerektiğini ve bunlar için hangi adımları takip etmemiz gerektiğinden bahsettik. Serializable arayüzünü uygulayan bir sınıfın tüm nesneleri serileştirilebilirdir. Ancak, eğer sınıf içerisindeki değişkenlerin tamamı primitive tip ise sorun yok, çünkü tüm primitive tipler otomatik olarak serileştirilebilir. Ama, sınıf içerisinde referans tipde değişkenler (reference type variables) var ise, bu değişkenlerin tuttuğu nesne örneklerinin serileştirilebilir (Serializable) olduğunu sınıf tanımlamasından tespit etmelisiniz. Çünkü tüm nesnelerin türediği java.lang.Object sınıfı Serializable interfaceini uygulamaz. Örnek olarak String nesneleri Java da öntanımlı olarak Serializable interfaceini tanımlar.

Burda bahsetmem gereken bir diğer nokta da, serileştirilme işleminin yapılmasını istemediğiniz sınıf alanları varsa (fields) bunları transient olarak sınıf tanımlamasında belirtmemiz gerekiyor. Eğer, herhangi bir sınıf içinde javaBlog adında bir field var ve siz bu fieldı serileştirilme işleminden hariç tutmak istiyor iseniz, şu şekilde tanımlamanız gerekiyor.
transient private JavaBlog javaBlog;

Örnek Kod

import java.io.Serializable;
public class Data implements Serializable{
        private String name;
        private String surname;
        private int age;
 
         public Data(String name, String surname, int age) {
                  this.name = name;
                  this.surname = surname;
                  this.age = age;
         }

          public int getAge() {
                  return age;
           }

           public String getName() {
                   return name;
            }

            public String getSurname() {
                    return surname;
             }
}




public class Main {
        public static void main(String[] args) {
               try {
                    Data d1 = new Data("Abdulkadir", "Selcukoglu", 27);
                    File f = new File("c:\\data.out");
                    f.createNewFile();
                    FileOutputStream fOut = new FileOutputStream(f);
                    ObjectOutputStream out = new ObjectOutputStream(fOut);
                    out.writeObject(d1);
                    out.close();
                    System.out.println("Process ends...");
              } catch (Exception e) {
                      System.out.println("Error in serializtion process!\n");
                      e.printStackTrace();
              }
       }
}

//Console Output
Process ends...


public class Main {
       public static void main(String[] args) {
               try {
                      Data d; //Nesnemizi tanımladık
                      File f = new File("c:\\data.out");
                      FileInputStream fIn = new FileInputStream(f); //Dosyamızı okumak üzere açtık
                      ObjectInputStream in = new ObjectInputStream(fIn); //Nesnemizi okuyacak olan                                                                                                                         //sınıfın örneğini oluşturduk
                      d = (Data) in.readObject(); //nesnemize okuduğumuz nesneyi atadık
                      System.out.println("DATA OF OBJECT");
                      System.out.println(d.getName() + " " + d.getSurname() + " " + d.getAge());                                        System.out.println("Process ends...");
               } catch (Exception e) {
                      System.out.println("Error in serializtion process!\n");
                      e.printStackTrace();
               }
        }
}


//Console Output
 DATA OF OBJECT
Abdulkadir Selcukoglu 27
Process ends...


ObjectOutputStream and ObjectInputStream

public class Cat implements Serializable {    
 
}
 
public class SerializeCat {
        public static void main(String[] args) {
               Cat c = new Cat();
                try {
                       FileOutputStream fs = new FileOutputStream("testSer.ser");
                       ObjectOutputStream os = new ObjectOutputStream(fs);
                        os.writeObject(c); // 3
                        os.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
                try {
                        FileInputStream fis = new FileInputStream("testSer.ser");
                        ObjectInputStream ois = new ObjectInputStream(fis);
                        c = (Cat) ois.readObject(); // 4
                        ois.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
       }
}

//Console Output 
 

Simdide biraz bu konuyla uygulama yaparak neler yapabilecegimize bakalim 

Object Graphs
  
public class Collar implements Serializable{
        private String collar;
        public Collar(String collar) {
              this.collar = collar;
        }

        public String getCollar() {
              return collar;
        }
}

 

public class Dog implements Serializable {
       private Collar dogCollar;
       private String dogName;

       public Dog(Collar dogCollar, String dogName) {
              this.dogCollar = dogCollar;
              this.dogName = dogName;
       }

       public Collar getDogCollar() {
             return dogCollar;
       }

       public String getDogName() {
             return dogName;
       }
}


public class SerializeDog {
        public static void main(String[] args) {
                Collar c = new Collar("Black");
                Dog d = new Dog(c, "Karabas");
                System.out.println("before: collar : " + d.getDogCollar().getCollar() + "name : "+d.getDogName());
                try {
                        FileOutputStream fs = new FileOutputStream("testSer.ser");
                        ObjectOutputStream os = new ObjectOutputStream(fs);
                        os.writeObject(d);
                        os.close();
                } catch (Exception e) {
                         e.printStackTrace();
                }
                try {
                        FileInputStream fis = new FileInputStream("testSer.ser");
                        ObjectInputStream ois = new ObjectInputStream(fis);
                        d = (Dog) ois.readObject();
                        ois.close();
                } catch (Exception e) {
                         e.printStackTrace();
                }
                System.out.println("after: collar : " + d.getDogCollar().getCollar() + "name : "+d.getDogName());
       }
}

//Console Outout
 before: collar : Blackname : Karabas
after: collar : Blackname : Karabas



Goruldugu gibi veri butunlugu saglanaraktan yazildi ve yine oldugu yerden veri butunlugu korunaraktan alindi. Simdi bir uygulama daha yapalim ve Collar sinifini  Serializable yapmadan nasil islem yapabiliriz ona bakalim.



Using writeObject and readObject


public class Collar{
        private String collar;
        public Collar(String collar) {
              this.collar = collar;
        }

        public String getCollar() {
              return collar;
        }
}

 

public class Dog implements Serializable {
       private transient Collar dogCollar;
       private String dogName;

       public Dog(Collar dogCollar, String dogName) {
              this.dogCollar = dogCollar;
              this.dogName = dogName;
       }

       public Collar getDogCollar() {
             return dogCollar;
       }

       public String getDogName() {
             return dogName;
       }
}


public class SerializeDog {
        public static void main(String[] args) {
                Collar c = new Collar("Black");
                Dog d = new Dog(c, "Karabas");
                System.out.println("before: collar : " + d.getDogCollar().getCollar() + "name : "+d.getDogName());
                try {
                        FileOutputStream fs = new FileOutputStream("testSer.ser");
                        ObjectOutputStream os = new ObjectOutputStream(fs);
                        os.writeObject(d);
                        os.close();
                } catch (Exception e) {
                         e.printStackTrace();
                }
                try {
                        FileInputStream fis = new FileInputStream("testSer.ser");
                        ObjectInputStream ois = new ObjectInputStream(fis);
                        d = (Dog) ois.readObject();
                        ois.close();
                } catch (Exception e) {
                         e.printStackTrace();
                }
                System.out.println("after: collar : " + d.getDogCollar().getCollar() + "name : "+d.getDogName());
       }
}



//Console Output
before: collar : Blackname : Karabas
Exception in thread "main" java.lang.NullPointerException
at transientdemo.hatalihali.SerializeDog.main(SerializeDog.java:38)
Java Result: 1

 


Bu hatanin sebebi Collar'in  Serializable olmamasi bunida su sekilde halledebiliriz simdi asagida duzgun calisan seklini yapiyoz



public class Collar{
        private String collar;
        public Collar(String collar) {
              this.collar = collar;
        }

        public String getCollar() {
              return collar;
        }
}

 

public class Dog implements Serializable {
       private transient Collar dogCollar;
       private String dogName;

       public Dog(Collar dogCollar, String dogName) {
              this.dogCollar = dogCollar;
              this.dogName = dogName;
       }

       public Collar getDogCollar() {
             return dogCollar;
       }

       public String getDogName() {
             return dogName;
       }

       private void writeObject(ObjectOutputStream os) {
              try {
                     os.defaultWriteObject();
                     os.writeObject(dogCollar.getCollar());
             } catch (Exception e) {

                    e.printStackTrace();
             }
       }

       private void readObject(ObjectInputStream is) {
             try {
                    is.defaultReadObject();
                    dogCollar = new Collar(is.readObject().toString());
             } catch (Exception e) {
                    e.printStackTrace();
             }
       }
 
}


public class SerializeDog {
        public static void main(String[] args) {
                Collar c = new Collar("Black");
                Dog d = new Dog(c, "Karabas");
                System.out.println("before: collar : " + d.getDogCollar().getCollar() + "name : "+d.getDogName());
                try {
                        FileOutputStream fs = new FileOutputStream("testSer.ser");
                        ObjectOutputStream os = new ObjectOutputStream(fs);
                        os.writeObject(d);
                        os.close();
                } catch (Exception e) {
                         e.printStackTrace();
                }
                try {
                        FileInputStream fis = new FileInputStream("testSer.ser");
                        ObjectInputStream ois = new ObjectInputStream(fis);
                        d = (Dog) ois.readObject();
                        ois.close();
                } catch (Exception e) {
                         e.printStackTrace();
                }
                System.out.println("after: collar : " + d.getDogCollar().getCollar() + "name : "+d.getDogName());
       }
}


//Console Output
 before: collar : Blackname : Karabas
after: collar : Blackname : Karabas




How Inheritance Affects Serialization
Simdide farkli bir detaya deginelim peki ya superclass

public class Animal{
        int weight = 42;
}


public class Dog extends Animal implements java.io.Serializable{
         String name;
         public Dog(int weight , String name) {
               this.name = name;
               this.weight = weight;
         }

}
 


public class TestMain {
      public static void main(String[] args) {
              Dog d = new Dog(35, "Fido");
              System.out.println("before: " + d.name + " "+ d.weight);
               try {
                        FileOutputStream fs = new FileOutputStream("testSer.ser");
                        ObjectOutputStream os = new ObjectOutputStream(fs);
                         os.writeObject(d);
                         os.close();
               } catch (Exception e) {
                          e.printStackTrace();
               }
               try {
                        FileInputStream fis = new FileInputStream("testSer.ser");
                        ObjectInputStream ois = new ObjectInputStream(fis);
                        d = (Dog) ois.readObject();
                        ois.close();
               } catch (Exception e) {
                        e.printStackTrace();
               }
               System.out.println("after: " + d.name + " "+ d.weight);
     }
}

//Console Output
before: Fido 35
after: Fido 42


Gorulduyu uzer veri butunlugu korunamadi cunku veri butunlu korunmasi icin Animal sinifininda .Serializable implements etmeliydi yani su sekilde olunca istenilen sekilde calismis oluyor

public class Animal implements Serializable {
        int weight = 42;
}


public class Dog extends Animal implements Serializable{
         String name;
         public Dog(int weight , String name) {
               this.name = name;
               this.weight = weight;
         }

}
 


public class TestMain {
      public static void main(String[] args) {
              Dog d = new Dog(35, "Fido");
              System.out.println("before: " + d.name + " "+ d.weight);
               try {
                        FileOutputStream fs = new FileOutputStream("testSer.ser");
                        ObjectOutputStream os = new ObjectOutputStream(fs);
                         os.writeObject(d);
                         os.close();
               } catch (Exception e) {
                          e.printStackTrace();
               }
               try {
                        FileInputStream fis = new FileInputStream("testSer.ser");
                        ObjectInputStream ois = new ObjectInputStream(fis);
                        d = (Dog) ois.readObject();
                        ois.close();
               } catch (Exception e) {
                        e.printStackTrace();
               }
               System.out.println("after: " + d.name + " "+ d.weight);
     }
}

//Console Output
before: Fido 35
after: Fido 35


Gorulduyu gibi bilgi butunlugu bozulmadan islem tamamlandi...

 Bu yazilanlar tamamen alintidir. Asagidaki iki siteden alinti yapilmistir. Yazan hocalarimin elerine saglik bilgilerini paylastigi icin Allah razi olsun
http://www.javablog.org/55-java-object-serialization
http://www.csharpnedir.com/articles/read/?id=518

Monday, September 27, 2010

java.io.Console Class

Java SE 6 ile java ailesi ne katilan bir sinif hakinda bugun biraz uygulama gelistirecem bu cmd araciligi ile notepad ile yazdigimiz bir java sinifina console'dan yani cmd'den ver girmyi saglayan bu sinifi inceliyecez.Asagida kodu bir notepad icine yazdim ve bilgisayarimda harkdiskin c kisminda az diye bir dosya ve az icinede risk adinda bir dosya actim ve asagidaki kodu yazdim daha sonra cmd araciligi ile derledim ve calistirirnca java.io.Console sinifini sayaside cmd'den kullanici adini ve parolayi girdim.

import java.io.Console;
public class Main {
      public static void main(String[] args) {
             Console console = System.console();
             String username = console.readLine("Username: ");
             char[] password = console.readPassword("Password: ");
             System.out.println("Welcome to Page");
             System.out.println("Hi "+username);
             System.out.println("Username "+username);
             System.out.println("Password : "+String.valueOf(password));
      }
}







 

Java IO (File,InputStream,OutputStream)

Bu kisim Hala bitmemis

Java'da input , output konusunu anlatmada once File sinifini anlatmak istiyorum.cunku disardaki bir kaynaga veri yazmak yada veri okumak icin bu kaynagi nerede oldugunu isminin ne oldugunu bilmem gerekiyor yada veri yazacaksam yazacagim verinin nereye yazilacagi yazilacagi seyin isminin ne olacagi ve hangi turdenden bir dosya olmasi(txt,doc,xml...) bu disari ile irtibati saglamak icin file sinifina ihtiyacimiz var ve bu sinifi methodlarini ve nasil kullanildigi ile ilgili uygulama gelistirerek anlatmak istiyorum. java.io paketinin icindedir
 java.io.File file = new java.io.File("D:\\Netbeans Projelerim\\JAVA IO\\FileTest.txt");
Bu sekilde tanimlayarak istenilen dosyanin elde edebiliriz
-----------------------------------------------------------------------
D:\\Netbeans Projelerim\\JAVA IO
FileTest.txt
Abdulkadir Selcukoglu
 ------------------------------------------------------------------------
public class FileMain {
         public static void main(String[] args) {
                  File file = new java.io.File("D:\\Netbeans Projelerim\\JAVA IO\\FileTest.txt");
                  System.out.println("File Name : "+ file.getName());
                  System.out.println("Dosyadaki Karakter Sayisi : "+ file.length());   
                  System.out.println("Bos Alan : " + file.getFreeSpace());
                  System.out.println("Dosyanin Yolu : " + file.getParentFile()); 
                  System.out.println("Dosya ve Dosyanin Yolu : " + file.getAbsolutePath());
//Asagidaki kod ile dosyanin ismini degistiriyor 
                  file.renameTo(new File("D:\\Netbeans Projelerim\\JAVA IO\\ModifyFileTest.txt")); 
         }
}
//Output Console
File Name : FileTest.txt
Dosyadaki Karakter Sayisi : 21
Bos Alan : 29700755456
Dosyanin Yolu : D:\Netbeans Projelerim\JAVA IO
Dosya ve Dosyanin Yolu : D:\Netbeans Projelerim\JAVA IO\FileTest.txt

Yukarida uygulama java.io.File sinifi ile gorduyumuz gibi disaridaki dosyaya ulasmamizi sagliyor. Dosyanin adini alabiliyoruz yolunu alabiliyoruz varmi yokmu diye bakabiliyoruz silebiliyoruz yada istenilen dosya dosya yoksa olusturabiliyor dosyanin ne kadar dolu olduguna bakabiliyoz ismini degistirebilyoruz ve buna benzer bir cok methodu var. Bu methodlar ileriki orneklerimizde yeri geldikce kullanacaz simdi tektek aciklama taraftari degilim methodlar.

Java'da disardaki veriye erismek icin kullanilir. Veri input ile istenilen kaynaktan elde edilir. Output ilede istenilen kanaga gonderilir. input ve output islemlerini iki sekilde gerceklestirir.
  • Byte Streams
  • Character Streams(Karakter Stream)

Byte Streams
Istenilen bir kaynaktan verileri byte halinde okumasini ve yazilmasini saglar. byte stream üzerinde iş yapabilmek için tasarlanmış sınıflar 
  • java.io.InputStream 
  • java.io.OutputStream

String , StringBuffer , StringBuilder


Strings Are Immutable Objects(String'ler degistirilemez Object'lerdir.)
 Iki kullanimda ayni seydir String s referans degisken olusturur new String() ise heap bolumunde yer ayirir yani objesini olusturur. ayni sekilde ikinci kullanimdada String s referens degisken olusturur ama s="abcdef" ise hep bolumunde objesini olusturur 
  •  String s = new String();
            s = "abc";

  •   String s = "abc";
Simdi String ile ilgili uygulamalar yapalim. 
String s = "abc"; 
String s2 = s;
String s = "abc";  
s = s.concat (”def”);
String x = "Java";
x.concat(" Rules!"); 

String x = "Java";
x = x.concat(" Rules!");






Creating New Strings(String olusturmak)
String s = "abc"; // Bir String object ve Bir Reference degisken olusturuldu
String s = new String("abc"); // Iki object ve Bir Reference degisken olustururldu.

Aslinda burada ikinci duruma baktigimizda biraz tuhaf oluyoz. Cunku normalde bir Object ve bir Reference olusturmasi gerekirdi ama bu String icin farkli bir durum var new keywork kullanildigi icin bir Object. Birde "abc" icin bir Object olusturur ve sonra "abc" new String() Object'ine ekler. ve boylece iki object olur

Developing with String Objects and Their Methods(String classinin methodlari) : Java dilinde en cok kullanilan ifade String ifadesidir. Biz bu bolumde String ifadesinin nasil kullanildigini hangi methodlara sahip oldugunu ve bu methodlarin ne ise yaradigi konusunu inceliyecez.
  • Strings
  • String concatenation operator
  • Methods of the String class
Strings : string veri tipi  "" isareti icinde verileri alan bir veri tipidir  bir cok tanimlama sekli var 
String name1 = "Abdulkadir Selcukoglu";
String name2 = new String("Abdulkadir Selcukoglu");
String name3 = new String();
name3 = "Abdulkadir Selcukoglu";

String ifadesi bu intefaceleri implement eder
  • java.io.Serializable
  • Comparable
  • CharSequence
CharSequence intefacesinin super intarfaceleri
  • String 
  • StringBuffer
  • StringBuilder
String concatenation operator(Stringleri birbirine baglama) : Iki string ifadeyi birbirine baglamak icin kullanilir. + isareti ile iki String birbirine baglar
String name = "Abdulkadir";
String surname = "Selcukoglu";
System.out.println(name+surname);
//Ekranda "Abdulkadir Selcukoglu" yazar.

- Methods of the String Class(String sinifinin methodlari) : 
  • chatAt
  • indexOf
  • length
  • replace
  • startWith
  • endWith
  • substring
  • trim
  • concat
  • copyValueOf
  • toCharArray
  • toLowerCase
  • toUpperCase
  • split
  • compareTo
  • contains
  • getBytes
  • isEmpty
  • format
- chatAt : Bu method geriye char tipinde bir deger yollar bu methodun bir parametresi var bu parametre init tipindedir ve girilen degerin String karekterimizde kacinci sirada oldugunu geriye cevirir
String name ="Abdulkadir";
System.out.println(name.charAt(0));
System.out.println(name.charAt(2));
System.out.println(name.charAt(7));
System.out.println(name.charAt(9));

 Ekranda A , d , d , r  gorunecek
-indexOf :Bu methot girilen ASIC degerini yada String ifadenin bizim string degiskenimizde kacinci yerde oldugunu gosterir.  Bu method asiri yuklenmus bir methottur.
public int indexOf(int ch) 
public int indexOf(int ch , int fromIndex)
public int indexOf(String srt)
public int indexOf(String srt , int fromIndex)  

Bu asiri yuklenmis methotlarin ikinci parametresi su manaya geliyor benim String degiskenimin n. harfinden sonra aramaya basla
String name = "Abdulkadir";
System.out.println(name.indexOf(65));
System.out.println(name.indexOf("b"));
System.out.println(name.indexOf(65,5));
System.out.println(name.indexOf("dul"));
System.out.println(name.indexOf("dul" 6));
Ekranda cevap olarak 2 , 3 , -1 , 4 , -1 olacak
 - length : Geriye int bir deger donderir. Bu methot bizim String degiskenimizde kactane karekte oldugunu dondurur. String degiskenimizdeki bosluklar dahil tum karekterlerin sayisini verir.
 String name = "Abdulkadir Selcukoglu";
System.out.println(name.length());
Ekranda sonuc 21 oluString name = "Abdulkadir Selcukoglu";

  String name = "  Abdulkadir Selcukoglu  ";
System.out.println(name.length());
Ekranda sonuc 25 olur cunku iki tane basinda iki tane sonunda birtanede ortasinda toplam 5 bosluk var

- replace : Bu method String degiskenimizde istenilen harfi yada Stringi istenilen harf yada sozcuk degistirmek icin kullanilir. iki parametresi var birinci String degiskenimizde degtirmek istedigimiz harf yada sozcuk ikincisi ise bu degistirmek istedigimiz yerine gelecek harf yada sozcuk
public String replace(char  oldChar , char newChar)
public String replace(CharSequence  target, CharSequence replacement)

String s = "aaabbbccc"




System.out.println(s.replace("b","t"));


System.out.println(s.replace("bbb","d"));
 - startsWith :  Istanilen bir karekterin yada kelimenin String degiskenimiz ilk karekterinden itibaren var olup olmadigin ogrenmek icin kullanilir. Geriye boolean tipinde bir deger dondurur. Eyer varsa true eyer yoksa false dondurur. 
public boolean startsWith(String prefix)
public boolean startsWith(String prefix , int toffset)
String name ="Abdulkadir Selcukoglu";
        System.out.println(name.startsWith("Sel"));        // 1
        System.out.println(name.startsWith("Ab"));      
// 2
        System.out.println(name.startsWith("Bir"));       // 3
        System.out.println(name.startsWith("Abdul"));  // 4
        System.out.println(name.startsWith("kadir"));   // 5
        System.out.println(name.startsWith("Abe"));    //6

//CONSOLE
false    // 1
true     // 2
false    // 3
true     // 4
false    // 5
false    // 6

  - endsWith : Verilen String degiskeninde sonra en son harften geriye dogru istenilen kelimenin veya harfin var olup olmadigini ogrenmek icin kullanilir. Geriye boolean tipinde deger dondurur. eyer varsa true yoksa false dondurur. 
public boolean endsWith(String prefix)
public boolean endsWith(String prefix , int toffset)
  String name = "Abdulkadir Selcukoglu";
        System.out.println(name.endsWith("u"));              // 1
        System.out.println(name.endsWith("lu"));             // 2
        System.out.println(name.endsWith("oglu"));         // 3
        System.out.println(name.endsWith("dir"));           // 4
        System.out.println(name.endsWith("kadir"));       // 5
        System.out.println(name.endsWith("Abdul"));     // 6
        System.out.println(name.endsWith("Sel"));         // 7

//CONSOLE
true    // 1
true   
// 2
true    // 3
false   // 4
false   // 5
false   // 6
false   // 7

Burada dikkat edilmesi gerekenString degiskenimizin en son harfinden sonra var olup olmadigin bakiyor.


- substring : String degiskenimizi istenilen indexten sonra yada istenilen araliktaki karekterleri okumak icin kullanilir.
String name = "Abdulkadir Selcukoglu";
        System.out.println(name.substring(2));     
        System.out.println(name.substring(2,7));
        System.out.println(name.substring(3,13));
        System.out.println(name.substring(0,11));
        System.out.println(name.substring(0));
        System.out.println(name.substring(11));
 
//CONSOLE
dulkadir Selcukoglu
dulka
ulkadir Se
Abdulkadir
Abdulkadir Selcukoglu
Selcukoglu

Not : Bu methotta iki parametre var ve bu araliktaki String degereleri alirken birinci deger istenilen index'teki deger dahildir ama iki parametredeki deger dahil degildir yani substring(2,7) yazilmis ise 2. index teki deger ekranda gosterilir ama 7 indesteki ekranda gosterilmez 6 indexteki gosterilir 


- trim :   String degiskenimizin basindaki ve sonundaki bosluklari kaldirmak icin kullanilir.
String name = "     Abdulkadir Selcukoglu      ";
        System.out.println(name);
        System.out.println(name.trim());
// CONSOLE
      Abdulkadir Selcukoglu      //ilk halinde trim kullanilmadigi icin bosluklar ile beraber ekranda yazildi
Abdulkadir Selcukoglu           // Ikinci halinde ise trim kullanilinca bastaki ve sondaki bosluklar kaldirirldi

- concat : Bir String ifadenin sonuna istenilen String ifadeyi eklemek icin kullanilir. 
String name = "Abdulkadir";
        System.out.println(name);
        System.out.println(name.concat(" Selcukoglu"));


// CONSOLE 
 Abdulkadir
Abdulkadir Selcukoglu


- copyValueOf :  Bu method istenilen String bir ifadeye  char dizisi tipinde bir degeri  kopyalamk icin kullanilir
String name = "Abdulkadir";
        String c = null;
        System.out.println("Sonuic : "+c);
        System.out.println("Sonuic : "+c.copyValueOf(name.toCharArray()));


 // CONSOLE
Sonuic : null
Sonuic : Abdulkadir


- toCharArray : Bu method bir String ifadeyi char dizinine cevirmek icin kullanilir.
String name = "Abdulkadir";
for(char c : name.toCharArray()){
   System.out.println(c);
}

//CONSOLE 
A
b
d
u
l
k
a
d
i
r

- toLowerCase :  Bir String ifadenin butun harflerini kucuk harfe cevirir.

String name = "Abdulkadir Selcukoglu";
System.out.println(name.toLowerCase()); 

//CONSOLE
abdulkadir selcukoglu

- toUpperCase :  Bir String ifadenin butun harflerini buyuk harfe cevirir.
 
String name = "Abdulkadir Selcukoglu";
System.out.println(name.toUpperCase());

//CONSOLE
 ABDULKADIR SELCUKOGLU

 Not : toLowerCase , toUpperCase parametreli olan asiri yuklu bir methodu var bu parametre Locale tipinde bir parametre ve istenilen dili eklemek icin kullanilir


- format :Bu methot bir String' e ekranda nasil bir sekil kalipta gorunmesini saglar.

String list[] ={"Abdulkadir" , "Ertugrul"};
String s = null;
System.out.println(s.format("Hos Geldin %s and %s", list));

//CONSOLE
Hos Geldin Abdulkadir and Ertugrul

--------------------------------------------------------------------------------------------------
String date = null;
System.out.println(date.format("Yerel Saat : %tT",Calendar.getInstance() )); 

//CONSOLE
Yerel Saat : 15:32:18


-------------------------------------------------------------------------------------------------- 
Calendar c = new GregorianCalendar(1983,00,06);
String date = null;
System.out.println(date.format("Dogum Gunu : %tD",c ));

//CONSOLE
Dogum Gunu : 01/06/83

--------------------------------------------------------------------------------------------------   
 String date = null;
 long n=123;
 System.out.println(date.format("%06d%n",n ));

//CONSOLE
 000123

- split : Bu method bir string ifadede istenilen karekterden sonrakilerini bir diziye atmayi saglar misal icin bir isim listesi var  String list ="Abdulkadir , Ertugrul , Rasim , Nazim";  ve dikkat edilece olursa bu String ifadede her isim bir virgül ile ayrilmis ben split methodunu kullananrak diyecem virgulden sonraki veriyi bir String dizisine atacak ve her okuma sirasinda veriyi okuyacak ve virgül gorunce yeni bir dizi index atacak

String list ="Abdulkadir,Ertugrul,Rasim,Nazim";
for(String name : list.split(",")){
    System.out.println(name);

}


//CONSOLE
Abdulkadir
Ertugrul
Rasim
Nazim


- compareTo :  iki String ifadenin ayni olup olmadigini kontrol eder ayni ise pozitif bior deger donderir farkli ise negatif cevap dondurur. 
       String s1 ="Abdulkadir Selcukoglu";
       String s2 ="abdulkadir Selcukoglu";
       String s3 ="abdulkadir selcukoglu";
       String s4 ="Abdulkadir Selcukoglu";
       String s5 ="Selcukoglu";
       String s6 ="Abdulkadir";
       System.out.println(s1.compareTo(s2));
       System.out.println(s1.compareTo(s3));
       System.out.println(s1.compareTo(s4));
       System.out.println(s1.compareTo(s5));
       System.out.println(s1.compareTo(s6));


//CONSOLE
-32
-32
0
-18
11


- contains : Istenilen bir String ifadenin icerisinde bir harfin , bir kelimenin yada herhangi bir ifadenin var olup olmadigini ogrenmek ici kullanilir. Geriye boolean tipinde bir deger gonderir. 


       String list ="Abdulkadir,Ertugrul,Rasim,Nazim";
       System.out.println(list.contains("Ab"));
       System.out.println(list.contains("Er"));
       System.out.println(list.contains("dir"));
       System.out.println(list.contains("Ertugrul"));
       System.out.println(list.contains("Nazim"));
       System.out.println(list.contains("Rasim"));
       System.out.println(list.contains("Ra"));
       System.out.println(list.contains("Deneme"));

//CONSOLE
true
true
true
true
true
true
true
false


- getBytes : Bir String ifadeyi byte dizisine cevirir.
       String name ="Abdulkadir";
       for(byte b : name.getBytes()){
            System.out.println(b);
       }



//CONSOLE
65
98
100
117
108
107
97
100
105
114


- isEmpty : Bir String ifadenin icerdigi bir degerin var olup olmadigina bakiyor. Eger bos ise true eyer dolu ise false dondurur.
       String name ="Abdulkadir";
       String surname = "";
       System.out.println(name.isEmpty());
       System.out.println(surname.isEmpty());


// CONSOLE
false
true


 StringBuffer
Aslinda String  ile StringBuffer islem olarak ayni seyi yapiyorlar ama aralarinda bazi farklar var bunlar
  •  String sinifindan daha hizli calisir. Cep telefonları gibi işlemci gücünün düşük olduğu aygıtlarda bu sınıflar ile ilgili işlemlerin olabildiğince hızlı olması iyidir
 public class StringTestMain {
      public static void main(String args[]) {
            String str = "";
            long start = System.currentTimeMillis();
            for (int i = 0; i < 10000; i++) {
                 str = str + "Abdulkadir Selcukoglu";
            }
            long finish = System.currentTimeMillis();
            System.out.println("Calisma zamanidaki sure : "+ (finish - start));
      }
}

//Console Output
Calisma zamanidaki sure : 22406

public class StringBufferTestMain {
       public static void main(String args[]) {
             StringBuffer sb = new StringBuffer();
             long start = System.currentTimeMillis();
             for (int i = 0; i < 10000; i++) {
                   sb.append("Abdulkadir Selcukoglu");
             }
             long finish = System.currentTimeMillis();
             System.out.println("Calisma zamanidaki sure : "+ (finish - start));
       }
}

//Console Output
Calisma zamanidaki sure : 15

 

  • String nesneleri sabit bir nesnedir ve bir kez yaratıldıktan sonra değiştirilemez, StringBuffer nesneleri ise değiştirilebilirler. 
public class StringTestMain {
       public static void main(String args[]) {
             String str = "Abdulkair";
             addName(str);
             System.out.println("All Name : "+str);

       }
       public static String addName(String name){
              name += " Ertugrul";
              System.out.println("Add Name : "+name);
              return name;
      }
}
 //Console Output
 Add Name : Abdulkair Ertugrul
All Name : Abdulkair

public class StringBufferTestMain {
     public static void main(String args[]) {
           StringBuffer sb=new StringBuffer();
           sb.append("Abdulkadir");
           addName(sb);
           System.out.println("All Name : "+sb);
     }

     public static StringBuffer addName(StringBuffer sb){
           sb.append(" Ertugrul");
           System.out.println("Add Name : "+sb);
           return sb;
     }
}

//Console Output
Add Name : Abdulkadir Ertugrul
All Name : Abdulkadir Ertugrul


  •  StringBuffer nesnesini önceden ihtiyacımız olduğu kadar uzun yaratmaktır. Bunun için de yapacağımız şey nesneyi yaratırken uzunluğunu belirtmektir;
StringBuffer yazi = new StringBuffer(int uzunluk); 

StringBuffer Sinifinin Methodlari 

append()

StringBuffer s1 = new StringBuffer(“Good”);

s1.append(“evening”);

insert()

StringBuffer s1 = new StringBuffer(“Good”);

s1.insert(1,’b’);

charAt()

StringBuffer s1 = new StringBuffer(“Good”);

Char letter = s1.charAt(2);

setCharAt()

StringBuffer s1 = new StringBuffer(“Good”);

S1.setCharAt(2,’v’);

setLength()

StringBuffer str= new StringBuffer(20);

Str.setLength(str.length()+10);

getChar();

StringBuffer str = new StringBUffer(“Leopard”);

Char ch[] = new char[10];

Str.getChars(3,6,ch,0);

Reverse()

StringBuffer str = new StringBUffer(“Leopard”);

StringBuffer strrev = str.reverse();

 StringBuilder 
 StringBuffer 1.5 ile java ailesinin icine girdi gorev olarak  StringBuffer ile ayni olmasina ragmen java StringBuilder kullanimini tavsiye eder yukarda yazdigim StringBuffer ile ilgili seyler bu sinif icinde gecerli birazdaha gelismis hali olarak dusunebiliriz
Değişebilir (mutable) string nesneleri oluşturmak için StringBuilder sınıfını incelemenizi öneririm. StringBuilder, değişebilir string nesneleri oluşturmanızı sağlayan String sınıfının alternatifi bir başka Java sınıfıdır. İçeriği sürekli değişen string nesnelerini uygulamanızda kullanıyor iseniz, bu tür stringleri StringBuilder sınıfı ile oluşturmanızı öneririm. Performans açısından çok daha verimli olur.