Javada Stringler

String, bazı kitaplar “katar” olarak da Türkçe’ye çeviriyor, bir dizi karakterin birleşimidir.

Herhangi bir programlama dilinde stringler, kullanıcıdan veri almadan tutun yazılımın çıktı (output) olarak verdiği veriye kadar pekçok işlemde sıkça kullanılır. Bu yüzden stringler, yazılım geliştiricilerin iyi bilmesi ve dilin sağladığı özelliklerinin iyi kavranmış olması gerekir.

String kavramı programlamada oldukça önemli ve sık kullanılan bir yapı olduğu için Java, geliştiricilerin string ve bunlar üzerindeki işlemleri hızlı ve basit bir şekilde yapabilmesi için çok gelişmiş string kütüphaneleri sunar. C/C++ (özellikle C) gibi dillerde varolan string (C de string yapısı yoktur) yapılarından çok daha farklı ve gelişmiş bir string mekanizması sunan Java, stringleri birer nesne olarak ele alır. Bu sayede, nesne yönelimli programlamanın getirdiği pekçok nimeti, böylesi sık kullanılan bir yapıya kazandırmış olur.

Stringler Değişmez Nesnelerdir (Immutable Objects)

Stringlerin Java’da nesne olarak ele alınmasının yanında, hemen belirtmem gereken bir diğer önemli nokta da, Java’da stringler değişmez nesnelerdir (immutable objects). Burada stringlerin değişmez bir yapıda olmasından kasıt, oluşturduğunuz string nesnelerinin karakterlerini daha sonra değiştiremezsiniz. Örnek olarak, uygulamanızda oluşturduğunuz “Java” stringini, daha sonra “Jawa” biçimine çeviremezsiniz.

Java’da stringlerin değişmez (immutable) olması, stringlerin bir defa oluşturulup daha sonra düzenlenmesinin imkansız olduğu anlamına gelmiyor tabiki. Stringler üzerinde yaptığınız herhangi bir değişiklikte Java, yeni bir string nesnesi oluşturarak referans değişkeninize bu yeni nesneyi atıyor. String nesnelerinin sunduğu string yapısını değiştiren methodlar da, kısaca yeni bir string döndürüyor.

Stringlerin Java’da değişmez nesneler (immutable objects) olarak tasarlanmasının elbette haklı birçok sebebi var. Ancak bu yazının konusu immutable objects yapısının avantajları olmadığı için bu konuya burada değinmeyeceğim. Ama şunu söylemek gerekirse, Java sağlam ve güvenli uygulamalar geliştirmek için tasarlanan bir dildir. Bu açıklama, şimdilik yeterlidir sanırım.

Not : 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.

Stringlerin Oluşturulması

Java’da stringler nesne olduğu için, stringleri herhangi bir nesne oluştururken kullandığımız new anahtar sözcüğü ile oluşturabiliriz. String sınıfı, pekçok farklı ve kullanışlı yapılandırıcı (constructor) method sunar ve birçok farklı biçimde string nesneleri oluşturmamıza olanak sağlar.

String oluşturmak için kullanılan en basit yöntem, bir string literal ile referans değişkene atama yapmaktır.Literaller, Java tarafından gördülüğü yerde string nesnesine çevrilir. Bu sayede literal kullanarak açık olmayan bir şekilde aslında bir string nesnesi oluşturmuş olursunuz.

String str = "Merhaba, ben bir String literalim";

Bir diğer yöntem, herhangi bir string değerini yapılandırıcı methoda aktarmaktır.

String str = new String("Fatih");

Stringler karakterlerin birleşimi olduğu için, bir karakter dizisi kullanarak da, string oluşturabilirsiniz. String sınıfı bu yapıyı sağlamak için gereken yapılandırıcı methodu sunar.

char[] charArray = {'J', 'A', 'V', 'A'};
String str = new String(charArray); // "Java" stringi

Bu tür kullanımlar, Java’da string oluşturmak için en çok kullanılan temel biçimlerdir. Ancak String sınıfı, daha pekçok farklı yapılandırıcı method sunar ve çok daha gelişmiş işlemler için bu yapılandırıcıları kullanabilirsiniz. Strnig sınıfının sunduğu tüm methodlara ulaşmak için Sun API sayfasına bakabilirsiniz.

String Literaller

Literaller, Java’da sabitlerdir. 3, 5.3, “Java” gibi her yapı Java’da literal olarak adlandırılır. Ancak Java, program kodu üzerinde gördüğü her string literali, otomatik olarak string nesnelerine çevirir. Uygulamanızın herhangi bir yerinde string literali oluşturduğunuz da, aslında bir string nesnesi oluşturmuş olursunuz. Bu yüzden herhangi bir string literali string tipindeki bir referans değişkene atamak mümkündür.

String literalleri de aynen bir nesne gibi uygulamanızda kullanabilirsiniz.

System.out.printf("%d", "Java".length());
//Çıktı
4

String literalleri ile söylemem gereken bir önemli nokta da, Java, içeriği aynı olan her string literali tek bir nesne olarak ele alır. Yani programınız içerisinde birkaç farklı yerde tanımladığınız “Java” string literali varsa, bunlar aslında aynı nesnedir. Bu string literalin atandığı tüm string değişkenleri aynı nesneye referans verilir. Bu yöntem ile, Java performansdan kazanır.

String Methodları

Java, stringler üzerinde her türlü işlemi yapabilmek için pekçok kullanışlı method sunar. Bunlardan en çok kullanılan birkaç methodu burada açıklama gereği hissettim.

length() Methodu

String sınıfının sunduğu length() methodu ile, stringin uzunluğunu alabilirsiniz.

String str = "Java Programlama";
System.out.println("Java Programlama stringinin uzunluğu " + str.length());
//Çıktı
Java Programlama stringinin uzunluğu 16

charAt() Methodu

Bu method ile string içinde, verilen pozisyondaki karakteri döndürebilirsiniz. Diziler üzerinde işlem yapmaya benzer. Stringler içerisindeki karakterlerin 0 dan başladığını hesaba katar.

String str = "Java Programlama";
System.out.println(str.charAt(0));
System.out.println(str.charAt(5));
//Çıktı
J
P

indexOf()

indexOf methodu ile, verilen bir karakterin ya da stringin (substring), ana string içinde kaçıncı sırada bulunduğunu bulmak için kullanılır. Pek çok farklı ve çok gelişmiş biçimi vardır.

String str = "Java Programlama";
System.out.println("a harfi ilk olarak : " + str.indexOf('a') + " sırada bulundu");
// a harfini aramaya 2. indexden başla
System.out.println("a harfi 2. indexden sonra " + str.indexOf('a', 2) + " sırada bulundu");
// "gram" stringinin nerede başladığını bul
System.out.println("gram altstringi " + str.indexOf("gram") + " sırada bulundu");

toUpperCase()

Stringin tüm karakterlerini büyük harfe çevirir.

String str = "Javada Stringler";
System.out.println(str.toUpperCase());
//Çıktı
JAVADA STRİNGLER

toLowerCase()

Stringin tüm karakterlerini küçük harfe çevirir.

String str = "Javada STRinGlER";
System.out.println(str.toLowerCase());
//Çıktı
javada stringler

getChars() Methodu

Bu method ile, string içindeki karakterleri, bir karakter dizisine aktarabilirsiniz. 4 parametre alır. 1. parametre, kopyalanacak karakterlerin String içinde kaçıncı sıradan başlanacağını belirtir. 2. parametre, en son kaçıncı karaktere kadar kopyalanacağını belirtir. 3. parametre, karakterlerin aktarılacak karakter dizisi değişkeninin adını, 4. ve son parametre ise, karakterlerin dizi içerisinde hangi indisden başlanarak kopyalanacağını belirtir.

String str = "Java Programlama";
char[] charArray = new char[4];
str.getChars(0, 4, charArray, 0);
//charArray içeriği
//'J','a', 'v', 'a'

Stringlerin Karşılaştırılması

Java’da stringler nesne olduğu için, string içeriğini ‘ == ‘ operatörü ile karşılaştıramayız. Primitive tiplerde istediğimiz şekilde çalışsa da, stringleri karşılaştırmak için bu operatör, beklenen yanıtı vermez. Referanslar ile ‘ == ‘ operatörü kullanıldığında, değişkenlerin aynı nesneye referans edilip edilmediği kontrol edilir. Bu yüzden, string değerlerini karşılaştırıken, String sınıfının sunduğu equals() methodunu kullanmak gerekmektedir.

String str = new String("Java");
String str2 = "Java";
 
if(str.equals("Java"))
{
    System.out.println("Stringler eşit");
}
else System.out.println("Stringler Eşit değil");
if(str2 == "Java")
{
    System.out.println("Aynı nesne");
}
else System.out.println("Aynı nesne değil");
if(str == "Java")
{
    System.out.println("Aynı nesne");
}
else System.out.println("Aynı nesne değil");
if(str2.equals(str))
{
    System.out.println("Stringler eşit");
}
else System.out.println("Stringler eşit değil");
//Çıktı
Stringler eşit
Aynı nesne
Aynı nesne değil
Stringler eşit

String ve Sayısal Değerler

Stringler ile ilgili değinilmesi gereken bir diğer nokta da, sayısal değerler ve stringler arasındaki dönüşüm işlemleri. String biçimindeki sayısal değerleri, o tipe uygun sayısal değerlere çevirmek ve sayısal değerleri, string biçimine döndürmek Java kütüphaneleri sayesinde çok kolay bir şekilde hallediliyor. Bu tür işlemler de programcıların sık sık ihtiyaç duyduğu operasyonlar olduğu için burada bahsetme gereği duydum.

Sayısal Değerlerin Stringlere Çevirilmesi

Sayısal değerleri, string tipine dönüştürmek için Java birkaç farklı yöntem sunar. Bunlardan ilki, işi Java derleyicisine bırakmak.

String str = "" + 5;
System.out.println(str);

İkincisi olarak, String sınıfının sunmuş olduğu valueOf() methodunu çağırarak, değerini stringe dönüştüreceğimiz sayısal veriyi bu methoda geçirmek.

float fl = (float) 5.2;
String str = String.valueOf(fl);

Bundan başka olarak, her primitive tipe karşılık gelen kapsayıcı sınıfın sunmuş olduğu toString() methodu ile, sayısal değerleri string tipine dönüştürebiliriz.

int a = 5;
double b = 5.3;
 
String str = Integer.toString(a);
String str2 = Double.toString(b);
 
System.out.println(str + " " + str2);

Stringlerin Sayısal Değerlere Çevirilmesi

Bilindiği gibi Java, int, float, byte, double, float gibi sayısal değerleri nesne olarak ele almıyor. Performans kaygıları nedeniyle bu tür değerleri primitive tip olarak işleme alıyor. Ancak, bu tür primitive değişkenlerin de Java’da, birer sınıf karşılığı bulunuyor. Örneğin int tipi için Integer, double tipi için Double.

Bu tür kapsayıcı sınıflarda (wrapper classes), içlerinde string değerleri kendi tiplerine dönüştüren methodlar tanımlamaktadır. parse…() ile başlayan bu methodlar ile, string olarak verilen değeri bu tipe uygun sayısal değerlere çevirebilirsiniz.

String str = "5";
String str2 = "4.3";
 
int a = Integer.parseInt(str);
double b = Double.parseDouble(str2);
 
System.out.println(a + " " + b);
System.out.println(a + b);
//Çıktı
5 4.3
9.3

Son Söz

String sınıfı, Java’da oldukça gelişmiş ve geniş bir kütüphane desteği ile gelmektedir.

Java API içerisinde, stringler ile yapmak istediğiniz hemen hemen her işlev için tasarlanmış bir method bulunuyor. Kendimce Java’da stringlerin çok kullanılan methodlarını ve string yapısı ile ilgili vurgulanması gereken önemli noktaları açıklamaya çalıştım. Ancak String sınıfının tüm özelliklerini burada ele almak imkansız. Daha geniş method dökümantasyonu için SUN API dökümanlarına bakıp, dilediğiniz methodu kullanmakta özgürsünüz =)


İlgili Yazılar:

  1. Javada Sayılar ve Number Sınıfı
  2. Java Tarih Formatlama – TimeStamp String Dönüşümleri
  3. Javada Diziler (Arrays)
  4. Javada Karar Mekanizmaları – if ve switch komutları
  5. Javada Disassembler ve Decompiler İşlemleri

Yorum bırakmak için buraya, Sitenizden trackback vermek için buraya tıklayabilirsiniz.

3 Responses to “Javada Stringler”

  1. Açelya diyor ki:

    Yazınızı okuduktan sonra yorum yapmadan geçme şansının olmadığını düşünüyorum. Çok güzel açıklanmış Java’da ki string yapıları, emeğiniz için teşekkürler :)

  2. mehmet diyor ki:

    çok teşekkrüler güzel hazılamışınız.

  3. Okay KANGAL diyor ki:

    hocam bu makale için gerçekten teşekkür ederiz …

Leave a Reply