💻 Java String Programlama Problemleri: Mülakatlara Hazırlık ve Uygulamalar
Meta Açıklaması (155 karakter):
Java String sınıfıyla ilgili en popüler 11 programlama problemini (Palindrom, Ters Çevirme, Değişmezlik, Karakter Sayımı) modern Java özellikleriyle nasıl çözeceğinizi öğrenin.
🎯 Bu Rehberde Ne Öğreneceksiniz?
Bu rehber, Java String sınıfı ile en sık sorulan algoritmik ve mülakat sorularının çözümlerini içerir.
Amaç; karakter sayımı, palindrom kontrolü, String ters çevirme, değişmezlik (immutability) ve benzeri işlemleri modern Java 8+ teknikleriyle öğrenmenizi sağlamaktır.
Tüm örnekler, Stream API, Lambda ifadeleri ve StringBuilder yapılarıyla anlatılmıştır.
✍️ Temel String Programlama Çözümleri
1️⃣ Tekrarlanan Karakterleri ve Sayılarını Bulma
Bir metin içindeki her karakterin kaç kez geçtiğini bulmak için HashMap ve Map.merge() metodu kullanılır.
for (char c : input.toCharArray())
charsWithCountMap.merge(c, 1, Integer::sum);
System.out.println(charsWithCountMap);
➡️ Açıklama: Map.merge() karakteri anahtar olarak alır ve sayacını artırır.
Alternatif – Stream API ile:
List<Character> list = input.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
list.forEach(c -> charsWithCountMap.merge(c, 1, Integer::sum));
System.out.println(charsWithCountMap);
2️⃣ String’i Ters Çevirme
En güvenli yöntem StringBuilder sınıfının reverse() metodudur.
private static void reverseInputString(String input) {
StringBuilder sb = new StringBuilder(input);
String result = sb.reverse().toString();
System.out.println(result);
}
➡️ Açıklama: StringBuilder değiştirilebilir (mutable) olduğu için performanslıdır.
3️⃣ Palindrom Kontrolü Yapma
Metin tersten de aynı okunuyorsa palindromdur.
private static void checkPalindromeString(String input) {
boolean result = true;
int length = input.length();
for (int i = 0; i < length / 2; i++) {
if (input.charAt(i) != input.charAt(length - i - 1)) {
result = false;
break;
}
}
System.out.println(input + " bir palindromdur = " + result);
}
➡️ Açıklama: İlk ve son karakterler sırayla karşılaştırılır; farklılık varsa döngü sonlanır.
4️⃣ Belirli Bir Karakteri Kaldırma
replaceAll() metodu istenen karakterleri metinden kaldırmak için kullanılır.
private static void removeCharFromString(String input, char c) {
String result = input.replaceAll(String.valueOf(c), "");
System.out.println(result);
}
➡️ Açıklama: replaceAll() karakteri boş stringle değiştirerek kaldırır.
5️⃣ String’in Değişmezliğini (Immutability) Kanıtlama
Java’daki String nesneleri değiştirilemezdir. Yeni bir değer atandığında yeni bir nesne oluşturulur.
String s1 = "Java";
String s2 = s1;
s1 = "Python";
System.out.println(s2); // Java
➡️ Açıklama: s1 değiştiğinde yeni bir “Python” nesnesi oluşturulur, s2 ise hâlâ “Java”yı gösterir.
6️⃣ Bir Metindeki Kelime Sayısını Bulma
Boşluk, sekme veya fazla aralıklar olsa bile doğru kelime sayısını döndürür.
private static void countNumberOfWords(String line) {
String trimmedLine = line.trim();
int count = trimmedLine.isEmpty() ? 0 : trimmedLine.split("\\s+").length;
System.out.println(count);
}
➡️ Açıklama: split("\s+"), birden fazla boşluğu tek boşluk olarak sayar.
🛠️ Gelişmiş String Programlama Çözümleri
7️⃣ İki String’in Aynı Karakterleri İçerip İçermediğini Kontrol Etme
İki String’in karakter kümeleri aynı mı, Set yapısıyla kontrol edilir.
private static void sameCharsStrings(String s1, String s2) {
Set<Character> set1 = s1.chars().mapToObj(c -> (char) c).collect(Collectors.toSet());
Set<Character> set2 = s2.chars().mapToObj(c -> (char) c).collect(Collectors.toSet());
System.out.println(set1.equals(set2));
}
➡️ Açıklama: Set.equals() iki kümenin birebir aynı elemanlara sahip olup olmadığını kontrol eder.
8️⃣ Bir String’in Başka Bir String’i İçerip İçermediğini Kontrol Etme
private static boolean stringContainsSubstring(String string, String substring) {
return string.contains(substring);
}
➡️ Açıklama: contains() metodu alt metin (substring) aramak için kullanılır.
9️⃣ Üçüncü Değişken Kullanmadan String’leri Takas Etme
s1 = s1.concat(s2);
s2 = s1.substring(0, s1.length() - s2.length());
s1 = s1.substring(s2.length());
➡️ Açıklama: substring() metodu, iki String’in değerlerini geçici olarak yer değiştirir.
🔎 1️⃣0️⃣ Tekrar Etmeyen İlk Karakteri Bulma
private static Character printFirstNonRepeatingChar(String string) {
char[] chars = string.toCharArray();
List<Character> discarded = new ArrayList<>();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (discarded.contains(c)) continue;
boolean repeated = false;
for (int j = i + 1; j < chars.length; j++) {
if (c == chars[j]) {
repeated = true;
discarded.add(c);
break;
}
}
if (!repeated) return c;
}
return null;
}
➡️ Açıklama: İlk kez tekrar etmeyen karakter döndürülür.
1️⃣1️⃣ String’in Sadece Rakam İçerip İçermediğini Kontrol Etme
🔹 Yöntem 1: Regex (matches)
if (string.matches("\\d+"))
System.out.println("Sadece Rakam İçerir: " + string);
🔹 Yöntem 2: Tip Dönüşümü (parseLong)
try {
Long.parseLong(string);
System.out.println("Sadece Rakam İçerir: " + string);
} catch (Exception e) {
System.out.println("Rakam Dışı Karakter Var: " + string);
}
➡️ Açıklama: Regex yöntemi karakter bazlı kontrol sağlar; parseLong sayısal geçerliliği test eder.
❓ Sıkça Sorulan Sorular (SSS)
- Neden StringBuilder kullanıyoruz?
String immutable olduğu için her işlemde yeni nesne oluşur. StringBuilder değiştirilebilir olduğu için performans sağlar.
- String değişmezse nasıl “değiştiriliyor”?
Değişen nesne değil, referanstır. Yeni atama yaptığında yeni nesne oluşturulur.
- Stream API kullanmanın avantajı nedir?
Daha az kod, daha fazla okunabilirlik ve fonksiyonel yapı kazandırır.
- Palindrom kontrolünde neden sadece dizinin yarısı kontrol edilir?
Simetrik yapısı gereği ilk yarı, ikinci yarının tersidir. Tamamını kontrol etmek gerekmez.
- replaceAll() ile replace() farkı nedir?
replaceAll regex destekler; replace sadece doğrudan karakter eşlemesi yapar.
🏁 Sonuç
Bu rehberle birlikte Java String manipülasyonu konusundaki 11 temel problemi öğrendiniz. Kodlama pratiklerinizi geliştirerek hem mülakatlarda hem de gerçek projelerde String işlemlerinde uzmanlaşabilirsiniz.
💡 Uygulamalarınızı Rabisu Bulut Geliştirici Platformu üzerinde deneyerek öğrenme sürecinizi hızlandırın. 🚀