8 Ocak 2015 Perşembe

String , StringBuffer&Builder

Bugünkü konumuzda Stringleri anlatmaya çalışacağız. Stringler nedir ? Kullanımları nasıldır ? Ne gibi özelliklere sahiptir ? gibi soruların cevabını arayacağız. Öncelikle immutable /değişmezlik nedir ona bakalım. Stringlerde obje değişmez , onun yerine yeni bir obje oluştururu. Örn String x="a"; olsun. x üzerinde herhangi bir değişiklik yaptığımız zaman x.metod(); burada x değişmez , yeni bir nesne daha oluşur. İşte bu özelliğe immutable diyoruz. Belki kodla daha iyi anlayabilir.

public static void main(String[] args) {

String s1 = "spring ";
// 1)"spring" degerine sahip bir String objesi olusur.

String s2 = s1 + "summer "; //spring summer
// 2)"summer" objesi olusur
// 3)"spring summer" objesi olusur
// s2 referansına "spring summer" objesine referansta bulunur

s1.concat("fall "); //spring full , fakat s1 hala spring !!
//4) "fall" degerine sahip String objesi olusur.
//5) "spring fall" degerine sahip String objesi olusur.
               // s1 in referans gosterdigi obje degismez !

s2.concat(s1); //spring summer spring (s1 hala spring demiştik)
                                //aynı nedenle s2 de hala spring summer
//6) "spring summer spring" objesi olusur.

s1 += "winter "; //şimdi artık spring winter oldu
//7) "winter" degerine sahip obje olusur.
//8)"spring winter" degerine sahip obje olusur.

System.out.println(s1 + " " + s2);
                //spring winter spring summer 

}
Şimdi de sık kullandığımız bazı metodlara bakalım.

length(): bildiğimiz üzere uzuluğu hesaplayan fonksiyondur. int döndürür.
public static void main(String[] args) {
String name = "xyz";
int len = name.length();
System.out.println("karakter sayisi:" + len);
}

isEmpty():stringin boyutu 0 ise true , değilse false değer döndürür.
public static void main(String[] args) {
String str = "";//str="xyz" olsa false değer döndürecekti
                                     //null olsa hata fırlatır
boolean isEmptyString = str.isEmpty();
System.out.println(isEmptyString);
}

charAt():Stringdeki karekteri almamızı sağlıyor
public static void main(String[] args) {
String name = "xyz";
char c = name.charAt(2);
System.out.println(c); //y
                // tanımlanmayan değişken olduğunda exception fırlatır
}

getChars(int baslangic, int end, char dst[], int hedefBaslangic):Stringdeki belirli bir yer almayı sağlar. parametrelerde isimlerini belirttik şimdi bir örnekle daha iyi pekiştirelim. Bu arada dizilerin ilk indexinin sıfır olduğunu unutmayalım.

public static void main(String args[]) {

String str = new String("abcdefgh");
char[] charArray = new char[4];
str.getChars(2, 6, charArray,0);
System.out.println(charArray);//cdef

}

compareTo&compareToIgnoreCase: Karşılaştırma yapar. Aradaki fark kadar int değer döndürür. CompareTo küçük büyük harf hassasiyeti varken , comporeToIgnoreCase ise bu yoktur. Örneklerde ne demek istediğimizi daha iyi anlayacaksınız

public static void main(String[] args) {
 
    System.out.println("a".compareTo("d"));
    System.out.println("b".compareTo("d"));
    System.out.println("e".compareTo("a"));
    System.out.println("ABa".compareTo("ABc"));
    //AB aynı olduğu için a ile c karşılaştırır
    System.out.println("a".compareToIgnoreCase("A"));
     //küçük büyük harf hassasiyeti yoktur.//0
    System.out.println("a".compareTo("A"));
 
    }

Şimdi de StringBuffer ve StringBuilder yapılarını inceleyelim. Nedir peki bu iki yapı. Yukarıda belirttiğimiz gibi String imuutable'di yani değişmez. Bir obje değiştiğinde bir asıl obje bir de referans obje oluşuyordu. Bu memory yoruyor. Bu nedenle bu yapılar ortaya çıkmıştır. Ne dediğimizi kod üzerinde daha iyi anlayacağınızı umuyorum

public static void main(String[] args) {
 
    StringBuffer sb = new StringBuffer("abc");
    sb.append("def");
    System.out.println("sb = " + sb);  //abcdef
    //eğer yapımız sb değil de String olsaydı çıktımız abc olacaktı
    }

Şimdi de her iki tarafta kullanılan bazı metodlara bakalım.
append():ekleme işini yapar. Aşağıdaki örnekte

public static void main(String[] args) {
StringBuffer sb = new StringBuffer("yaşamak");
sb.append(" güzel ");
sb.append(2015);
                //sb="bu atanma tipi yanlış.DİKKAT!!"

System.out.println(sb);
}
delete():belirtilen indexler arası silme işlemi yapar.
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("0123456789");
sb.delete(4, 6);
// index 0 dan baslayacaktir!
// [start-end)
System.out.println(sb);
}

insert(); append'den farklı olarak istenilen yere ekleme yapar.
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("0123456789");
sb.insert(4, "----"); // 4.indexten sonra ekleme yapar
System.out.println(sb);

}

toString(): String Buffer ve String Builder objelerini objeye çevirir.
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("test string");
                String deneme=sb.toString();
                deneme+="boyle ekleyebiliriz artk";
                System.out.println(deneme);
                 
}

Kaynakça
http://www.injavawetrust.com/pure-java-53-string-01/
http://www.injavawetrust.com/pure-java-54-string-methods/
http://www.injavawetrust.com/pure-java-55-stringbuffer-and-stringbuilder/


Hiç yorum yok:

Yorum Gönder