Monday, September 27, 2010

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.

No comments:

Post a Comment