Java Programlama Diziler, Döngüler ve Karakter Katarları (String Sınıfı)
Diziler (1/2) Belirli bir tipte, sınırlı sayıda değer içeren nesnelerdir Temel veri tiplerinde (int, double) veya sınıf tiplerinde (MyClass) değerler içerebilirler Örnekler: int[] arrayofints; MyClass[] arrayofobjects; Dizi uzunluğu (dizinin kaç değer içereceği) dizi oluşturma zamanında belirlenir Örnekler: arrayofints = new int[2]; arrayofobjects = new MyClass[3]; Dizi uzunluğuna length üye değişkeni ile ulaşılabilir: Örnek: arrayofints.length
Diziler (2/2) Dizi elemanlarının ilk değerlerinin atanması: {ilkdeger, ikincideger,...} Örnekler: int[] arrayofints = {10, 20}; MyClass[] arrayofobjects = {firstobj, secondobj}; Dizi üyelerine erişim: arrayname[index] Geçerli indeks değerleri: 0... arrayname.length 1 Örnekler: arrayofints[0] = 0; arrayofobjects[1].method();
Örnek: Dizi Tanımlama ve Kullanma public static void main(string[] args) { int month_days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; } System.out.println( Nisan " + month_days[3] + " gundur.");
Döngüler For While Do-While For-Each (Gelişmiş For Döngüsü)
Diziler Üzerinde Dolaşma Gelişmiş For Gelişmiş for (enhanced for) döngüsü: indeks değişkenine gerek duymaz Kullanım: for (<type> <variable> : <array_name>) {} <type> temel veri tipleri ya da sınıf tipleri olabilir Örnek: MyClass[] array; for (MyClass item : array) { } // item dizinin o anki değerini tutar ve her adımda güncellenir
Örnek: Dizi Kullanımı Double tipinde tek boyutlu bir dizi tanımlayıp, bu dizinin elemanlarını, aralarında bir karakter boşluk ve yan yana olacak şekilde normal ve gelişmiş for döngüleri kullanarak ekrana yazdıran Java programını yazın.
Çok Boyutlu Diziler
Örnek: Çok Boyutlu Diziler Aşağıdaki çıktıyı diziler ve döngüler kullanarak oluşturan Java programını yazın. 0 1 2 3 4 5 6 7 8 9
Örnek: Çok Boyutlu Diziler (Çözüm) int twod[][] = new int[4][]; twod[0] = new int[1]; twod[1] = new int[2]; twod[2] = new int[3]; twod[3] = new int[4]; int i, j, k = 0; for (i=0; i<4; i++) for (j=0; j<i+1; j++) { } twod[i][j] = k; k++; } for (i=0; i<4; i++) { } for (j=0; j<i+1; j++) System.out.print( twod[i][j] + " "); System.out.println();
Standart Java Paketleri
String Nesneleri Java da string değişkenleri java.lang.string sınıfından türetilmiş nesnelerdir Javadoc: http://docs.oracle.com/javase/8/docs/api/java/lang/string.html Java dilinde hazır gelen string desteği: Çift tırnak içerisindeki karakterlerden String nesnesi oluşturulur Örnek: String mystring = "merhaba dünya"; + operatörü ile string birleştirme Örnek: String mystring = "merhaba " + "dünya"; + operatörü kullanılarak string değişkenler ile birleştirilen değişkenler ve sabitler otomatik olarak string nesnelerine dönüştürülürler Örnek: String strzeytin = "dün " + 2 + " kilo zeytin aldım";
Kaçış Karakterleri Kaçış Karakteri Açıklama \ddd 8 tabanında verilmiş sayıya (ddd) karşılık gelen Unicode karakter \nxxxx 16 tabanında verilmiş sayıya (xxxx) karşılık gelen Unicode karakter \ Tek tırnak \ Çift tırnak \\ Ters bölü \r Satırbaşı karakteri (carriage return) \n Yeni satır karakteri \f Sayfa başı tuşu (form feed) \t Tab \b Geri silme tuşu
String Yapıcıları (1) Varsayılan yapıcı: String s = new String(); Karakter dizisi parametresi alan yapıcı: char chars[] = {'a', 'b', 'c'}; String s = new String(chars); System.out.println(s); // abc
String Yapıcıları (2) String parametresi alan yapıcı: public static void main(string[] args) { char c[] = {'J', 'a', 'v', 'a'}; String s1 = new String(c); String s2 = new String(s1); } System.out.println(s1); System.out.println(s2);
String Yapıcıları (3) Byte dizisi alan yapıcı: public static void main(string[] args) { byte ascii[] = {65, 66, 67, 68, 69, 70}; String s1 = new String(ascii); } System.out.println(s1); // ABCDEF
String Yapıcıları (4) StringBuilder ve StringBuffer nesneleri alan yapıcılar: String(StringBuffer buffer) String(StringBuilder builder) http://docs.oracle.com/javase/8/docs/api/java/lang/stringbuffer.html http://docs.oracle.com/javase/8/docs/api/java/lang/stringbuilder.html
Karakter Çıkarma - charat String nesnesinden tek bir karakter çıkarmak için kullanılır. char ch; ch = "abc".charat(1); // b
Karakter Çıkarma getchars (1) String nesnesinden aynı anda birden fazla karakter çıkarmak için kullanılır. void getchars(int sourcestart, int sourceend, char[] target, int targetstart) sourcestart: kaynak başlangıç pozisyonu sourceend: kaynak bitiş pozisyonu target: hedef karakter dizisi targetstart: hedef başlangıç pozisyonu
Karakter Çıkarma getchars (2) String s = "This is a demo of the getchars method."; int start = 10; int end = 14; char buf[] = new char[end-start]; s.getchars(start, end, buf, 0); System.out.println(buf);
Karakter Çıkarma tochararray String nesnesindeki tüm karakterleri bir karakter dizisinin içerisine aktarır char[] tochararray();
String Nesnelerini Karşılaştırma (1) Iki string nesnesini karşılaştırmak için, nesnelerden birinin equals metodu kullanılabilir: boolean equals(object str) String nesnelerini küçük/büyük harf ayrımına bakmaksızın karşılaştırmak için: boolean equalsignorecase(string str)
String Nesnelerini Karşılaştırma (2) String s1 = "Hello"; String s2 = "Hello"; String s3 = "Good-bye"; String s4 = "HELLO"; System.out.println(s1 + " equals " + s2 + " -> " + s1.equals(s2)); System.out.println(s1 + " equals " + s3 + " -> " + s1.equals(s3)); System.out.println(s1 + " equals " + s4 + " -> " + s1.equals(s4)); System.out.println(s1 + " equalsignorecase " + s4 + " -> " + s1.equalsignorecase(s4)); ----------------------------------------------------------------------------------------------------------------------------- Hello equals Hello -> true Hello equals HELLO -> false Hello equals Good-bye -> false Hello equalsignorecase HELLO -> true
String Karşılaştırma startswith ve endswith String nesnesinin başka bir string ile başladığını ya da bittiğini test eder: boolean startswith(string str) boolean endswith(string str) "Foobar".startsWith("Foo"); "Foobar".endsWith("bar");
String Karşılaştırma compareto İki String nesnesini alfabetik olarak karşılaştırmak için kullanılır. int compareto(string str) Eğer kaynak String nesnesi str den küçükse negatif bir tamsayı, büyükse pozitif bir tamsayı döndürür. Eğer iki String nesnesi değeri aynıysa 0 döndürür. "araba".compareto("deneme"); "kitap". compareto("defter"); // negatif // pozitif
String Arama indexof ve lastindexof Bir String nesnesinin başlangıç ve bitiş noktaları arasındaki karakterleri yeni bir String nesnesi olarak döndürür. int indexof(string str) int lastindexof(string str) int indexof(string str, int startindex) int lastindexof(string str, int startindex)
String Arama Örnek String s = "Now is the time for all good men " + "to come to the aid of their country."; System.out.println("indexOf(the) = " + s.indexof("the")); System.out.println("lastIndexOf(the) = " + s.lastindexof("the")); System.out.println("indexOf(the, 10) = " + s.indexof("the", 10)); System.out.println("lastIndexOf(the, 60) = " + s.lastindexof("the", 60)); ---------------------------------------------------------------------------------------------------------------- indexof(the) = 7 lastindexof(the) = 55 indexof(the, 10) = 44 lastindexof(the, 60) = 55
String Değiştirmek substring Bir String nesnesinin başlangıç ve bitiş noktaları arasındaki karakterleri yeni bir String nesnesi olarak döndürür. String substring(int startindex) String substring(int startindex, int endindex) String s1 = "deneme".substring(1, 3); // ene String s2 = "kitap".substring(0, 3); // kita
String Değiştirmek concat İki String nesnesini concat metodu birleştirebilirsiniz. Metodun dönüş değeri birleştirilmiş String nesnesidir concat metodu yerine + operatörü kullanılabilir. String s1 = "one"; String s2 = s1.concat("two"); // onetwo String s1 = "one"; String s2 = s1 + "two ; // onetwo
String Değiştirmek trim Bir String nesnesinin başındaki ve sonundaki boşluk karakterlerini siler. String s = " Hello World ".trim(); // Hello World"
String Nesnesine Çevrim valueof Herhangi bir temel veri tipinin (double, int) veya nesnenin anlamlı bir String nesnesine dönüştürülmesini sağlar valueof nesne tipi için de aşırı yüklenmiştir ve tostring metodunun oluşturduğu değeri döndürür Bu yüzden kendi tanımladığınız sınıflar için tostring metodunu aşırı yüklememiz yeterlidir static String valueof(double num) static String valueof(char chars[]) static String valueof(int num) static String valueof(object obj) static String valueof(long num)...
Uygulama Aşağıdaki veri tiplerinde değişkenler tanımlayıp, bu değişkenlerin valueof metotlarından dönen değeleri ekrana yazarak bu metodu kullanınız int double char[] Araba sınıfı
String Nesnelerinde Büyük/Küçük Harf Dönüşümü tolowercase: String nesnesindeki bütün büyük harfleri küçük harfe dönüştürür touppercase: String nesnesindeki bütün küçük harfleri büyük harfe dönüştürür String s = "This is a test."; String upper = s.touppercase(); // THIS IS A TEST String lower = s.tolowercase; // this is a test
String Nesnelerini Birleştirmek - join Birden fazla String nesnesini, bir ayırıcı karakter kullanarak biraraya getiren statik metottur String result = String.join(" ", "Ak", "Beyaz", "Siyah"); // Ak Beyaz Siyah result = String.join(", ", "Ak", "Beyaz", "Siyah"); // Ak, Beyaz, Siyah
String Nesnelerini Parçalara Bölmek - split Bir String nesnesini, bir ayırıcı karakter kullanarak daha küçük String nesnelerine bölüp bunları bir String dizisi olarak döndüren metottur String str = "004-034556-12"; String[] parts = str.split("-"); System.out.println(parts[0]) ; // 004 System.out.println(parts[1]) ; // 034556 System.out.println(parts[2]) ; // 12
StringBuffer Sınıfı String nesneleri değiştirilemez (immutable), sabit sayıda karakter içeren nesnelerdir Daha önce gördüğümüz, String nesnesi değiştiren metotların yeni String nesneleri döndürmesinin nedeni de budur Çalışma zamanında varolan nesne üzerinde değişiklik yapmak yerine yeni nesneler oluşturulması performans açısından uygun değildir Bir karakter katarı üzerinde yoğun değişiklik yapılması gerektiği durumlarda StringBuffer sınıfı kullanılmalıdır
StringBuffer Yapıcıları Varsayılan yapıcı yeniden yerleştirmeye (relocation) engel olmak için 16 ekstra karakter: StringBuffer b = new StringBuffer(); Tamsayı parametresi alan yapıcı: StringBuffer b = new StringBuffer(10); // 16 ekstra, 16+10=26 String parametresi alan yapıcı: StringBuffer b = new StringBuffer("hello"); // 16 ekstra, 16+5=21
StringBuffer length ve capacity metotları Bir StringBuffer nesnesinin uzunluğunu ve bu nesneye ayrılan kapasiteyi öğrenmek için kullanılan metotlardır: public static void main(string[] args) { StringBuffer b = new StringBuffer("Hello"); } System.out.println("buffer = " + b); // buffer = Hello System.out.println("length = " + b.length()); // length = 5 System.out.println("capacity = " + b.capacity()); // capacity = 21
StringBuffer ensurecapasity Bir StringBuffer nesnesini oluşturulduktan sonra, ona ayrılan buffer ın genişletilmesi için kullanılır Programın akışı sırasında, cok sayıda karakterin StringBuffer nesnesine ekleneceği farkedildiğinde performansı arttırmak amacıyla kullanılabilir void ensurecapacity(int mincapacity)
StringBuffer charat ve setcharat StringBuffer nesnesi içerisinde tutulan karakterlerden, belirlenmiş bir pozisyondaki karakter alınabilir (charat) veya değiştirilebilir (setcharat) void charat(int where) void setcharat(int where, char ch) "where" belirlenen karakterin pozisyonudur.
StringBuffer Örnek public static void main(string[] args) { StringBuffer b = new StringBuffer("Hello"); System.out.println("buffer before = " + b); // buffer before = Hello System.out.println("charAt(1) before = " + b.charat(1)); // charat(1) before = e } b.setcharat(1, 'i'); b.setlength(2); System.out.println("buffer after = " + b); // buffer after = Hi System.out.println("charAt(1) after = " + b.charat(1)); // charat(1) after = i
StringBuffer getchars StringBuffer nesnesinde belirlenene iki pozisyon arasındaki karakterleri karakter dizisine kopyalamak için kullanılır void getchars(int sourcestart, int sourceend, char target[], int targetstart) sourcestart: kopyalanacak karakterlerin başlangıç noktası sourceend: kopyalanacak karakterlerin bitiş noktası target: içine karakterlerin kopyalanacağı karakter dizisi targetstart: kopyalamanın yapılacağı karakter dizisinde kopyalama için başlangıç noktası
StringBuffer append StringBuffer a herhangi bir veri tipinin karakter katarı gösteriminin eklenmesini sağlar Veri tipinin karakter katarı gösterimi, valueof metodundan elde edilir StringBuffer append(string str) StringBuffer append(int num) StringBuffer append(object obj)
StringBuffer append Örnek public static void main(string[] args) { String s; int a = 42; StringBuffer b = new StringBuffer(40); } s = sb.append("a = ").append(a).append("!").tostring(); System.out.println(s); // a = 42!
StringBuffer insert StringBuffer nesnesinin belirlenmiş pozisyonuna yeni bir karakter, tamsayı, nesne vs. eklemekte kullanılır StringBuffer insert(int index, String str) StringBuffer insert(int index, char ch) StringBuffer insert(int index, Object obj) "index" StringBuffer nesnesine ekleme yapılacak pozisyonudur
StringBuffer insert Örnek public static void main(string[] args) { StringBuffer b = new StringBuffer("I Java!"); } b.insert(2, "like "); System.out.println(b); // I like Java!
StringBuffer reverse StringBuffer nesnesindeki karakterlerin sırasını tersine çevirir public static void main(string[] args) { StringBuffer b = new StringBuffer("abcdef"); } System.out.println(b); b.reverse(); System.out.println(b); // abcdef // fedcba
StringBuffer delete ve deletecharat StringBuffer nesnesinden belirlenen bir aralıktaki karakterleri veya belirlenen bir pozisyondaki karakteri silmeye yarayan metottur StringBuffer delete(int startindex, int endindex) StringBuffer deletecharat(int index) "index", StringBuffer nesnesinden silinecek karakterin pozisyonudur. "startindex" ve "endindex", sırasıyla, silinmenin gerçekleşeceği aralığın başlangıç ve bitiş pozisyonlarıdır
StringBuffer delete ve deleteatchar Örnek public static void main(string[] args) { StringBuffer b = new StringBuffer("This is a test."); b.delete(4, 7); System.out.println("After delete: " + b); // This a test. } b.deletecharat(0); System.out.println("After deletecharat: " + b); // his a test.
StringBuffer replace StringBuffer nesnesinin belirlenen bir aralıktaki karakterlerini parametre olarak verilen bir karakter katarı ile değiştirir StringBuffer replace(int startindex, int endindex, String str) "startindex" ve "endindex", sırasıyla, silinmenin gerçekleşeceği aralığın başlangıç ve bitiş pozisyonlarıdır endindex pozisyonundaki karakter silinmez Önce varolan karakterler silinir. Daha sonra parametre olarak gönderilen karakter katarı eklenir
StringBuffer replace Örnek public static void main(string[] args) { } StringBuffer b = new StringBuffer("This is a test."); b.replace(5, 7, "was"); System.out.println("After replace: " + b); // This was a test.
StringBuffer substring StringBuffer nesnesinin belirlenen bir aralıktaki karakterlerini elde etmek için kullanılır StringBuffer substring(int startindex) StringBuffer substring(int startindex, int endindex) "startindex" ve "endindex", sırasıyla, elde edilecek karakter katarının başlangıç ve bitiş pozisyonlarıdır Eğer sadece "startindex" belirtilmişse, bu pozisyondan başlayıp StringBuffer nesnesinin son karakterine kadarlık (son karakter dahil) kısım elde edilir
StringBuffer indexof ve lastindexof StringBuffer nesnesinin içerisinde belirlenen bir karakter katarını aramak için kullanılırlar. Metot bulunan pozisyonu döndürülür. Bulunmazsa -1 döndürür. indexof nesneyi başından sonuna doğru ararken, lastindexof sondan başa doğru arama yapar StringBuffer b = new StringBuffer("one two one"); int i = b.indexof("one"); System.out.println("First index: " + i); // 0 i = b.lastindexof("one"); System.out.println("Last index: " + i); // 8
StringBuilder JDK 5 eklenmiş bir sınıftır. StringBuffer a benzer bir işleve sahiptir. StringBuffer, senkronize ve işparcacığı-güvenli (thread-safe) StringBuilder bu özelliklere sahip değil. Bu yüzden daha hızlı çalışıyor Birden fazla iş parçacığının karakter katarına erişiminin söz konusu olmadığı uygulamalarda StringBuilder kullanılmalı