Dizgiler

Dizgiler · Çalışma Soruları
String ve charBirleştirme (+)İndeks ve charAtsubstring, indexOf, splitequals, ==, compareToStringBuilderUygulamalar ve printf
Her slaytta bir soru · çoktan seçmeli, çıktı ve adım adım çalıştırma soruları. Önce kendiniz çözün, sonra cevabı açın. · Sercan KÜLCÜ

Ç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".
"12"+"34"="1234"

Ç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.

1+2int 3→3+"3""33"→+4"334"→+5"3345"

Çı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 + 1 int 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() ve concat yeni 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.
"java"eski nesne "JAVA"atanmadı "JAVA?"s şimdi bunu gösterir

Ç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));
0G1i2r3e4s5u6n
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?

0G1i2r3e4s5u6nson: 6

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());
0P1R2O3G4R5A6M2 dahil5 hariç →
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.

0e1c2e3.4k5a6y7a8@9u10n11i12.13t14r

15 karakterlik dizgi; indeksler 0–14.

0e1c2e3.4k5a6y7a8@9u10n11i12.13t14rat = 8

indexOf('@') ilk @ karakterinin indeksini verir: 8.

0e1c2e3.4k5a6y7a8@9u10n11i12.13t14rhariç

substring(0, 8): 0 dahil, 8 hariç → "ece.kaya" (8 karakter).

0e1c2e3.4k5a6y7anokta = 3

Arama artık ad içinde: '.' indeks 3'te.

0e1c2e3.4k5a6y7a

substring(0, 3) → "ece".

0e1c2e3.4k5a6y7a

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?

"elma""armut""""kiraz"

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.
  • replace tü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 String ayrı nesne → a == b false, ama equals true.
  • intern() havuzdaki nesneyi döndürür → true.
acbOrduOrdu

Ç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.

0a1b

Değiştirilebilir tampon "ab" ile başlar.

0a1b213-

append aynı nesneye ekler ve nesnenin kendisini döndürür; bu yüzden zincirlenebilir.

0a1b213-425-

Yeni String oluşmaz; tampon büyür.

0a1b213-425-637-

i = 3 de eklendi.

4 <= 3 → false, döngü biter.

toString() o anki içerikten ayrı bir String üretir.

0-132-324-516b7a

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.

0O1r2d3u

4 karakter; son indeks 3.

Boş dizgiyle başlanır.

0O1r2d3ui

charAt(3) = 'u' eklenir.

0O1r2d3ui

charAt(2) = 'd' → "ud" (her += yeni String).

0O1r2d3ui

charAt(1) = 'r' → "udr".

0O1r2d3ui

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.

0g1i2r3e4s5u6n

Önce küçük harfe çevrilir. sesliler dizgisi Türkçe sesli harfleri tutar.

0g1i2r3e4s5u6ni=0

'g': indexOf → -1 → sesli değil.

0g1i2r3e4s5u6ni=1

'i': indexOf → 3 ≥ 0 → sesli, sayac = 1.

0g1i2r3e4s5u6ni=2

'r': indexOf → -1 → sesli değil.

0g1i2r3e4s5u6ni=3

'e': indexOf → 1 ≥ 0 → sesli, sayac = 2.

0g1i2r3e4s5u6ni=4

's': indexOf → -1 → sesli değil.

0g1i2r3e4s5u6ni=5

'u': indexOf → 6 ≥ 0 → sesli, sayac = 3.

0g1i2r3e4s5u6ni=6

'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.

0k1a2z

Sonuç StringBuilder'da biriktirilecek.

'k' − 'a' = 10; (10 + 2) % 26 = 12.

0m

'a' + 12 = 'm'.

0m1c

'a': (0 + 2) % 26 = 2 → 'c'.

'z': (25 + 2) % 26 = 27 % 26 = 1: % 26 alfabenin başına sarar.

0m1c2b

'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ı.
frekansa (0)3n (13)2s (18)1

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.

0k1a2b3a4k

toLowerCase(): 'K' ≠ 'k' sorununu önler.

0k1a2b3a4ksolsag

Aksi kanıtlanana kadar palindrom kabul edilir.

0k1a2b3a4ksolsag

0 < 4; 'k' != 'k' → false: uçlar eşit.

0k1a2b3a4ksolsag

İçe doğru ilerle.

0k1a2b3a4ksolsag

1 < 3; 'a' != 'a' → false.

0k1a2b3a4ksol = sag

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ı.
  • %05d soldan sıfırla doldurur; %,d binlik ayırıcı koyar. Türkçe yerel ayarda ondalık ayırıcı virgül olurdu (3,14).
0A1d2a3␣4␣5␣6|7␣8␣9410211|

Ç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.

Son

Dizgiler: Çalışma Soruları
Konu anlatımı: Dizgiler sunumu
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.