Dizgiler
Çoktan Seçmeli · Temeller
Soru 1: String ve char Sabitleri
Aşağıdaki satırlardan hangisi derleme hatası verir?
C: Çift tırnak String sabitidir, tek tırnak char sabitidir; String bir char değişkenine atanamaz. "" uzunluğu 0 olan geçerli bir String'dir.
Çıktı Sorusu · Geçmiş Sınav (2025-26 Bütünleme)
Soru 2: "12" + "34"
Aşağıdaki Java kodunun çıktısı nedir?
String sayi1 = "12";
String sayi2 = "34";
String toplam = sayi1 + sayi2;
System.out.println(toplam);
int a = 12, b = 34;
System.out.println(a + b);
System.out.println(sayi1 + 3 + 4);
System.out.println(3 + 4 + sayi1);Cevabı göster
Çıktı:
1234 46 1234 712
- İki String arasındaki
+birleştirmedir: "12" + "34" = "1234" (değişken adı “toplam” olsa da). - İki int arasında
+toplamadır: 46. +soldan sağa işlenir: "12" + 3 → "123", + 4 → "1234". Öte yandan 3 + 4 = 7 önce toplanır, sonra "7" + "12" = "712".
Çoktan Seçmeli · Geçmiş Sınav (2025-26 Final)
Soru 3: "23" + "14"
Aşağıdaki Java kodunun çıktısı nedir?
String sayi1 = "23"; String sayi2 = "14"; String toplam = sayi1 + sayi2; System.out.println(toplam);
B: Değişkenler String olduğu için + sayısal toplama değil, uç uca eklemedir; araya boşluk konmaz. 37 için önce sayıya çevirmek gerekirdi.
Çoktan Seçmeli · Temeller
Soru 4: Soldan Sağa Birleştirme
Aşağıdaki satırın çıktısı nedir?
System.out.println(1 + 2 + "3" + 4 + 5);
D: Soldan sağa: 1 + 2 = 3 (iki int); 3 + "3" = "33" (artık String); "33" + 4 = "334"; "334" + 5 = "3345". Bir String'e ulaşıldıktan sonraki tüm + işlemleri birleştirmedir.
Çıktı Sorusu · Temeller
Soru 5: char Aritmetiği
Aşağıdaki kodun çıktısı nedir? ('a' karakterinin kodu 97'dir.)
char k = 'a'; System.out.println(k + 1); System.out.println((char) (k + 1)); System.out.println("" + k + 1); System.out.println('a' + 'b');
Cevabı göster
Çıktı:
98 b a1 195
- char bir sayıdır:
k + 1int olur → 97 + 1 = 98. (char)dönüşümü 98'i karaktere çevirir → b."" + könce String yapar ("a"), sonra "1" eklenir → a1.- İki char toplanınca int: 97 + 98 = 195 (birleştirme değil!).
Çıktı Sorusu · Temeller
Soru 6: Değişmezlik
Aşağıdaki kodun çıktısı nedir?
String s = "java";
s.toUpperCase();
s.concat("!");
System.out.println(s);
s = s.toUpperCase() + "?";
System.out.println(s);Cevabı göster
Çıktı:
java JAVA?
- String değişmezdir:
toUpperCase()veconcatyeni nesne döndürür; sonuç atanmadığı için kaybolur, s değişmez. - 5. satırda dönen yeni nesne s'ye atanır: değişen nesne değil, s'nin gösterdiği yerdir.
Çoktan Seçmeli · İndeks
Soru 7: length ve length()
String s = "abc"; int[] a = {1, 2}; için hangisi doğru biçimde derlenir?
D: String'de uzunluk bir metottur: s.length() → 3. Dizide uzunluk bir alandır: a.length → 2. size() koleksiyonlarda (ArrayList) kullanılır.
Çıktı Sorusu · İndeks
Soru 8: charAt ve indexOf
Aşağıdaki kodun çıktısı nedir?
String s = "Giresun";
System.out.println(s.length() + " " + s.charAt(0) + s.charAt(s.length() - 1));
System.out.println(s.indexOf('e') + " " + s.indexOf("su") + " " + s.indexOf('x'));
System.out.println(s.charAt(2) + s.charAt(3));Cevabı göster
Çıktı:
7 Gn 3 4 -1 215
- Son karakter indeks length() − 1 = 6: 'n'. Satır "7 " ile başladığı için char'lar birleştirilir.
- indexOf ilk konumu verir: 'e' → 3, "su" → 4 (s'nin konumu); bulunamazsa −1.
- Son satırda iki char toplanır: 'r' (114) + 'e' (101) = 215. "re" için
"" + s.charAt(2) + s.charAt(3)gerekir.
Çoktan Seçmeli · İndeks
Soru 9: Sınır Dışı charAt
"Giresun".charAt(7) çağrısının sonucu nedir?
A: 7 karakterlik dizgide geçerli indeksler 0–6'dır. Derleyici bunu yakalamaz; çalışma anında StringIndexOutOfBoundsException fırlatılır. char ilkel tür olduğu için null dönemez.
Çıktı Sorusu · Metotlar
Soru 10: substring Sınırları
Aşağıdaki kodun çıktısı nedir?
String s = "PROGRAM"; System.out.println(s.substring(0, 3)); System.out.println(s.substring(3)); System.out.println(s.substring(2, 5) + "|" + s.substring(4, 4) + "|"); System.out.println(s.substring(1, 4).length());
Cevabı göster
Çıktı:
PRO GRAM OGR|| 3
substring(a, b): a dahil, b hariç; uzunluk b − a.- Tek parametre: başlangıçtan sona kadar → "GRAM".
substring(4, 4)boş dizgidir (hata değil);substring(1, 4)uzunluğu 4 − 1 = 3.
Çoktan Seçmeli · Metotlar
Soru 11: Hatalı substring
String s = "PROGRAM"; için aşağıdakilerden hangisi çalışma zamanı hatası verir?
A: Geçerli aralık 0 ≤ a ≤ b ≤ length(). 5 > 3 olduğu için A hata verir. substring(7) ve substring(3, 3) boş dizgi, substring(0, 7) dizginin tamamıdır.
Adım Adım Çalıştırma · Metotlar
Soru 12: E-postadan Ad ve Soyad
E-posta adresinden ad ve soyad ayrılıyor. Her satırdan sonra değişkenler ne olur, çıktı nedir?
Önce kendiniz tahmin edin, sonra › ile ilerleyin.
15 karakterlik dizgi; indeksler 0–14.
indexOf('@') ilk @ karakterinin indeksini verir: 8.
substring(0, 8): 0 dahil, 8 hariç → "ece.kaya" (8 karakter).
Arama artık ad içinde: '.' indeks 3'te.
substring(0, 3) → "ece".
substring(4) → noktadan sonraki kısım: "kaya".
toUpperCase() yeni bir String döndürür; soyad değişkeni yine "kaya"dır.
String s = "ece.kaya@uni.tr"; int at = s.indexOf('@'); String ad = s.substring(0, at); int nokta = ad.indexOf('.'); String isim = ad.substring(0, nokta); String soyad = ad.substring(nokta + 1); System.out.println(soyad.toUpperCase() + ", " + isim);
Çoktan Seçmeli · Metotlar
Soru 13: split ve Boş Parça
"elma,armut,,kiraz".split(",").length kaçtır?
C: Ardışık iki virgülün arası boş dizgi ("") olarak diziye girer: [elma, armut, , kiraz] → 4. Yalnızca sondaki boş parçalar atılır.
Çıktı Sorusu · Metotlar
Soru 14: trim, replace, contains
Aşağıdaki kodun çıktısı nedir?
String s = " Ali Veli ";
String t = s.trim();
System.out.println("[" + t + "] " + t.length());
System.out.println(t.replace('l', 'L'));
System.out.println(t.toLowerCase().contains("veli"));
System.out.println("banana".replace("an", "AN"));Cevabı göster
Çıktı:
[Ali Veli] 8 ALi VeLi true bANANa
trim()yalnızca baştaki ve sondaki boşlukları siler; aradaki boşluk kalır → 8 karakter.replacetüm eşleşmeleri değiştirir ve yeni String döndürür.- "veli" küçük harfle aranır; önce
toLowerCase()yapıldığı için true.
Çoktan Seçmeli · Metotlar
Soru 15: startsWith ve Büyük Harf
Aşağıdakilerden hangisi false üretir?
D: startsWith ve endsWith büyük-küçük harfe duyarlıdır: 'G' ile 'g' farklı karakterlerdir. Harf büyüklüğünü yok sayan yalnızca equalsIgnoreCase'dir.
Çoktan Seçmeli · Metotlar
Soru 16: join ve valueOf
Aşağıdaki satırın çıktısı nedir?
System.out.println(String.join("-", "a", "b", "c") + String.valueOf(3.5));B: String.join ayırıcıyı yalnızca parçaların arasına koyar: "a-b-c". String.valueOf(3.5) → "3.5"; ikisi + ile ayırıcısız birleşir.
Çıktı Sorusu · Karşılaştırma
Soru 17: == ile equals
Aşağıdaki kodun çıktısı nedir?
String a = "Ordu";
String b = new String("Ordu");
String c = "Ordu";
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a.equals(b));
System.out.println(a == b.intern());Cevabı göster
Çıktı:
false true true true
- a ve c havuzdaki aynı nesne → true;
new Stringayrı nesne →a == bfalse, amaequalstrue. intern()havuzdaki nesneyi döndürür → true.
Çoktan Seçmeli · Karşılaştırma
Soru 18: Sabit Birleştirme
Aşağıdaki tanımlardan sonra hangi ifade true verir?
String a = "a", b = "b";
String r = a + b;
final String f = "a";A: final değişken ve sabitlerden oluşan ifadeyi derleyici birleştirir; sonuç havuzdaki "ab"dir. a final değildir: a + b ve a + "b" çalışma anında yeni nesne üretir. İçerik için yine de equals kullanılmalıdır.
Çıktı Sorusu · Karşılaştırma
Soru 19: compareTo Değerleri
Aşağıdaki kodun çıktısı nedir? ('a' = 97, 'e' = 101, 'A' = 65)
System.out.println("elma".compareTo("armut"));
System.out.println("kedi".compareTo("kediler"));
System.out.println("Ali".compareTo("ali"));
System.out.println("abc".compareTo("abc"));Cevabı göster
Çıktı:
4 -3 -32 0
- İlk farklı karakterin kod farkı döner: 'e' − 'a' = 101 − 97 = 4 (pozitif: elma sonra gelir).
- Biri diğerinin başıysa uzunluk farkı: 4 − 7 = −3.
- 'A' − 'a' = 65 − 97 = −32: büyük harfler küçüklerden önce gelir.
- Eşit dizgiler → 0.
Çoktan Seçmeli · Karşılaştırma
Soru 20: null ile equals
Aşağıdaki kod çalıştırıldığında ne olur?
String x = null;
System.out.println("sabit".equals(x));
System.out.println(x.equals("sabit"));B: "sabit".equals(x) gerçek bir nesnenin metodudur, null ile karşılaştırınca false döner. x.equals(...) ise null üzerinden metot çağırır → NullPointerException. Bu yüzden sabit değer solda yazılır.
Çoktan Seçmeli · Karşılaştırma
Soru 21: Türkçe Locale
"ISPARTA".toLowerCase(Locale.forLanguageTag("tr")) ne döndürür?
C: Türkçe kurallarında büyük I'nın küçüğü noktasız ı'dır. İngilizce locale ile "isparta" olurdu. Parametresiz toLowerCase() makinenin diline bağlıdır; teknik metinde Locale.ENGLISH verilmelidir.
Çoktan Seçmeli · Girdi
Soru 22: next() Sonrası nextLine()
Kullanıcı önce Ada yazıp Enter'a, sonra Giresun Merkez yazıp Enter'a basıyor. Çıktı nedir?
Scanner k = new Scanner(System.in);
String kelime = k.next();
String satir = k.nextLine();
System.out.println(kelime + "|" + satir + "|");D: next() "Ada"yı okur, Enter (⏎) tamponda kalır. nextLine() ⏎'a kadar okur → boş dizgi döner, kullanıcı ikinci satırı yazmadan program devam eder. Çözüm: araya ek bir k.nextLine();.
Adım Adım Çalıştırma · StringBuilder
Soru 23: append, toString, reverse
Aşağıdaki kodun çıktısı nedir? sb'nin içeriğini adım adım izleyin.
Önce kendiniz tahmin edin, sonra › ile ilerleyin.
Değiştirilebilir tampon "ab" ile başlar.
append aynı nesneye ekler ve nesnenin kendisini döndürür; bu yüzden zincirlenebilir.
Yeni String oluşmaz; tampon büyür.
i = 3 de eklendi.
4 <= 3 → false, döngü biter.
toString() o anki içerikten ayrı bir String üretir.
reverse() tamponun kendisini ters çevirir; s etkilenmez (String değişmez).
sb + ile birleştirilirken toString() otomatik çağrılır.
StringBuilder sb = new StringBuilder("ab"); for (int i = 1; i <= 3; i++) { sb.append(i).append('-'); } String s = sb.toString(); sb.reverse(); System.out.println(s + " " + sb);
Çoktan Seçmeli · StringBuilder
Soru 24: Döngüde Birleştirme Maliyeti
Döngüde s = s + i; yerine sb.append(i); tercih edilmesinin nedeni nedir?
A: String değişmez olduğu için her + yeni nesne üretir; n turda kopyalanan karakter sayısı yaklaşık n²/2'ye çıkar. StringBuilder değiştirilebilir tampondur, sonunda tek bir toString() yeterlidir.
Adım Adım Çalıştırma · Uygulamalar
Soru 25: Dizgiyi Ters Çevirme
Dizgi sondan başa okunarak ters çevriliyor. ters değişkenini adım adım izleyin.
Önce kendiniz tahmin edin, sonra › ile ilerleyin.
4 karakter; son indeks 3.
Boş dizgiyle başlanır.
charAt(3) = 'u' eklenir.
charAt(2) = 'd' → "ud" (her += yeni String).
charAt(1) = 'r' → "udr".
charAt(0) = 'O' → "udrO".
−1 >= 0 → false, döngü biter.
Büyük O sona geçti. Kısa yol: new StringBuilder(s).reverse().toString().
String s = "Ordu"; String ters = ""; for (int i = s.length() - 1; i >= 0; i--) ters += s.charAt(i); System.out.println(ters);
Adım Adım Çalıştırma · Uygulamalar
Soru 26: Sesli Harf Sayma
Her karakterin sesliler dizgisinde olup olmadığına indexOf ile bakılıyor. Çıktı nedir?
Önce kendiniz tahmin edin, sonra › ile ilerleyin.
Önce küçük harfe çevrilir. sesliler dizgisi Türkçe sesli harfleri tutar.
'g': indexOf → -1 → sesli değil.
'i': indexOf → 3 ≥ 0 → sesli, sayac = 1.
'r': indexOf → -1 → sesli değil.
'e': indexOf → 1 ≥ 0 → sesli, sayac = 2.
's': indexOf → -1 → sesli değil.
'u': indexOf → 6 ≥ 0 → sesli, sayac = 3.
'n': indexOf → -1 → sesli değil.
Sesli harf sayısı 3 (i, e, u).
String s = "Giresun".toLowerCase(); String sesliler = "aeıioöuü"; int sayac = 0; for (int i = 0; i < s.length(); i++) { if (sesliler.indexOf(s.charAt(i)) >= 0) sayac++; } System.out.println(sayac);
Adım Adım Çalıştırma · Uygulamalar
Soru 27: Sezar Şifresi (kaydır = 2)
Her harf alfabede 2 ileri kaydırılıyor. Çıktı nedir? ('a' = 0, …, 'k' = 10, 'z' = 25)
Önce kendiniz tahmin edin, sonra › ile ilerleyin.
Sonuç StringBuilder'da biriktirilecek.
'k' − 'a' = 10; (10 + 2) % 26 = 12.
'a' + 12 = 'm'.
'a': (0 + 2) % 26 = 2 → 'c'.
'z': (25 + 2) % 26 = 27 % 26 = 1: % 26 alfabenin başına sarar.
'a' + 1 = 'b'.
Çözmek için aynı döngü kaydir yerine 26 − 2 = 24 ile çalıştırılır.
String metin = "kaz"; int kaydir = 2; StringBuilder sifreli = new StringBuilder(); for (int i = 0; i < metin.length(); i++) { char c = metin.charAt(i); int yer = (c - 'a' + kaydir) % 26; sifreli.append((char) ('a' + yer)); } System.out.println(sifreli);
Çıktı Sorusu · Uygulamalar
Soru 28: Karakter Frekansı
Aşağıdaki kodun çıktısı nedir?
String s = "ananas"; int[] frekans = new int[26]; for (int i = 0; i < s.length(); i++) frekans[s.charAt(i) - 'a']++; for (int k = 0; k < 26; k++) if (frekans[k] > 0) System.out.print((char) ('a' + k) + "" + frekans[k] + " ");
Cevabı göster
Çıktı: a3 n2 s1
c - 'a'harfin indeksini verir: a → 0, n → 13, s → 18.- İkinci döngü sayaçları alfabe sırasıyla gezer; dizgideki sıra (a, n, a, n, a, s) önemli değildir.
(char)(...) + ""olmasa char ile int toplanırdı.
Adım Adım Çalıştırma · Uygulamalar
Soru 29: Palindrom: İki Uç
İki işaretçiyle palindrom kontrolü yapılıyor. Çıktı nedir?
Önce kendiniz tahmin edin, sonra › ile ilerleyin.
toLowerCase(): 'K' ≠ 'k' sorununu önler.
Aksi kanıtlanana kadar palindrom kabul edilir.
0 < 4; 'k' != 'k' → false: uçlar eşit.
İçe doğru ilerle.
1 < 3; 'a' != 'a' → false.
sol = sag = 2: ortada tek karakter kaldı.
2 < 2 → false, döngü biter.
toLowerCase() olmasaydı ilk karşılaştırmada 'K' != 'k' → false olurdu.
String s = "Kabak".toLowerCase(); int sol = 0, sag = s.length() - 1; boolean palindrom = true; while (sol < sag) { if (s.charAt(sol) != s.charAt(sag)) { palindrom = false; break; } sol++; sag--; } System.out.println(palindrom);
Çoktan Seçmeli · Uygulamalar
Soru 30: Kelime Sayma
Aşağıdaki satırın çıktısı nedir?
String s = " Ali ata bak ";
System.out.println(s.trim().split(" +").length);B: trim() baş ve sondaki boşlukları atar; " +" düzenli ifadesi “bir veya daha fazla boşluk” demektir, çift boşluk tek ayırıcı sayılır → [Ali, ata, bak]. split(" ") kullanılsaydı çift boşluk arası boş parça eklenir, sonuç 4 olurdu.
Çıktı Sorusu · Biçimleme
Soru 31: format Belirteçleri
Aşağıdaki kodun çıktısı nedir? (Hücreleri sayın.)
String ad = "Ada"; int adet = 42; double fiyat = 3.14159; System.out.println(String.format(Locale.US, "%-6s|%4d|%6.2f|", ad, adet, fiyat)); System.out.println(String.format(Locale.US, "%05d|%,d", 42, 1234567));
Cevabı göster
Ada | 42| 3.14| 00042|1,234,567
%-6s: 6 hücre, sola yaslı → "Ada" + 3 boşluk.%4d: 4 hücre, sağa yaslı → 2 boşluk + 42.%6.2f: 2 ondalık ("3.14", 4 karakter) 6 hücreye sağa yaslı.%05dsoldan sıfırla doldurur;%,dbinlik ayırıcı koyar. Türkçe yerel ayarda ondalık ayırıcı virgül olurdu (3,14).
Çoktan Seçmeli · Biçimleme
Soru 32: Tür Uyuşmazlığı
Aşağıdaki satır çalıştırıldığında ne olur?
System.out.printf("%d%n", 3.5);D: %d tam sayı bekler, double verilmiştir. Derleyici biçim dizgisini denetlemez; hata çalışma anında oluşur. Ondalıklı sayı için %f ya da %.1f kullanılır.