# String Metotları

## Büyük-Küçük Harf  Çevrimi

> ## `.toLowerCase()` | `.toUpperCase()`

Bir karakter dizisinin karakterlerini (harflerini) büyük olarak **`.toUpperCase()`** metoduyla, küçük olarak **`.toLowerCase()`** metoduyla dönüştürebiliriz. Örnek:

{% code lineNumbers="true" %}

```javascript
let karakterDizisi = 'İstiklal Marşı';
alert( karakterDizisi.toUpperCase() ); // Büyük harf yaptık.
alert( karakterDizisi.toLowerCase() ); // Küçük harf yaptık.
```

{% endcode %}

## Karakterin Pozisyonunu Bulma

> ### `.indexOf()` | `.lastIndexOf()` | `.search()`

Bir karakter dizisinin içinde geçen alt karakter veya karakterleri arayarak ilk geçtiği pozisyonu **`.indexOf()`** metodu ile buluruz. **`.indexOf()`** metodu iki parametre alır, biri zorunlu diğeri isteğe bağlıdır.  Kullanım: **`.indexOf(arananKarakter, aramayaBaslamaPozisyonu)`** şeklindedir ve aranan karakter zorunludur fakat aramaya başlama pozisyonu zorunlu değildir. Yazılmaz ise ilk karakterden yani 0. pozisyondan başlar. Örnek:

{% code lineNumbers="true" %}

```javascript
let deyim = 'Dediğimi yap, yaptığımı yapma';
alert( deyim.indexOf('Dedi') ); // İlk geçtiği poz. 0 sonucunu verir.
alert( deyim.indexOf('yap') ); // İlk geçtiği poz. 9 sonucunu verir.
alert( deyim.indexOf('Dedi',6) ); // Bulamaz -1 sonucunu verir.
```

{% endcode %}

Aranan **karakter bulunamazsa -1 sonucunu verir.** Aranan karakterin birden fazla pozisyonu var ise hepsini bulmak için bir döngüye ihtiyaç vardır. Bunu ilerleyen konularda işleyeceğiz.

Bir de sondan arama şekli olan **`.lastIndexOf()`** metodu vardır. Örnek.

{% code lineNumbers="true" %}

```javascript
let deyim = 'Dediğimi yap, yaptığımı yapma';
alert( deyim.lastIndexOf('yap') ); // Sondan başa ilk geçtiği poz. 24 sonucunu verir.
```

{% endcode %}

**`.lastIndexOf()`** metodu **`.indexOf()`** metoduna göre daha az kullanılan bir metottur.

Bir karakter dizisinin içinde geçen ***ifadeyi*** ise **`.search()`** metodu ile buluruz. Örnek.

{% code lineNumbers="true" %}

```javascript
let deyim = 'Dediğimi yap, yaptığımı yapma';
alert( deyim.search('yap') ); // 'yap' ilk başladığı indisi verir.
```

{% endcode %}

**`.search()`** metodu alt karakter aramaktan çok *ifade* aramaya yöneliktir. Bu konuyu ileride [Düzenli İfadeler](/javascript-egitimi/duzenli-ifadeler-regular-expressions.md) konusunda işleyeceğiz.

## Karakter Kontrolü ( İçeriyor mu? Başlıyor mu? Bitiyor mu? )

> ### `.includes()` | `.startsWith()` | `.endsWith()`

Bir karakter dizisinin içinde geçen alt karakter veya karakterlerin pozisyonu sizi ilgilendirmiyorsa sadece varlık/yokluk arıyorsanız bu metotları kullanmalısınız.

* İçeriyor mu?: **`.includes(arananKarakter, aramayaBaslamaPozisyonu)`**
* Başlıyor mu?: **`.startsWith(baslananKarakter)`**
* Bitiyor mu?: **`.endsWith(baslananKarakter)`**

Bu metotların sonucu **True (doğru)** veya **False (yanlış)** olarak döner. Örnek.

{% code lineNumbers="true" %}

```javascript
let tekerleme = 'Dal sarkar kartal kalkar, kartal kalkar dal sarkar';
alert( tekerleme.includes('kar') ); // True: Bulundu
alert( tekerleme.includes('kartal', 45) ); //False: 45.Pozisyondan sonra bulunamadı

alert( tekerleme.startsWith('Dal') ); //True: 'Dal' ile başlıyor.
alert( tekerleme.startsWith('dal') ); //False: 'dal' ile başlamıyor.

alert( tekerleme.endsWith('kar') ); //True: 'kar' ile bitiyor.
alert( tekerleme.endsWith('.') ); //False '.' ile bitmiyor.
```

{% endcode %}

## Karakteri Değiştirme

> ### `.replace()` | `replaceAll()`

Bir karakter dizisinde geçen bir *ifadeyi* başka bir *ifade* ile değiştirmek için **`.replace()`** metodu kullanılır. İki tane zorunlu parametresi vardır ve **`.replace(arananIfade, yerineKonulacakIfade)`** olarak kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let ifade = 'JAVASCRIPT JAVASCRIPT';
alert ( ifade.replace('AVASCRIPT','avascript') );
```

{% endcode %}

Aranan ifade ilk bulunduğu yerde değişir ve metot sonlanır. Tüm eşleşmelerin değişmesi için **`.replaceAll()`** metodu kullanılır.

{% code lineNumbers="true" %}

```javascript
let ifade = 'JAVASCRIPT JAVASCRIPT';
alert ( ifade.replaceAll('AVASCRIPT','avascript') );
```

{% endcode %}

## Karaktere Pozisyon ile Erişme

> ### `.at()` | `.charAt()` | `[ ]`

Bir karakter dizisinin karakterlerine **`.at()`** ile erişebiliriz. Bir karakter dizisinin ilk karakteri her zaman 0.indisten (pozisyondan) başlar. Örnek

```javascript
let kelime = 'Javascript';
alert( kelime.at(0) ); // 'J' harfi çıktısı alınır.
alert( kelime.at(1) ); // 'J' harfi çıktısı alınır.
alert( kelime.at(-1) ); // 't' harfi çıktısı alınır.
alert( kelime.at(-2) ); // 'p' harfi çıktısı alınır.
alert( kelime.at(100) ); // 'undefined' çıktısı alınır.
```

**`.at()`** metodu ile negatif sayılar kullandığınızda sağ baştan başlayarak size karakterleri verir. Geçersiz başvuru yaptığınızda ise 'undefined' değerini alırsınız.

Aynı işlemi **`.charAt()`** metodu ile de yapabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript';
alert( kelime.charAt(0) ); // 'J' çıktısı alınır.
alert( kelime.charAt(1) ); // 'a' çıktısı alınır.
alert( kelime.charAt(kelime.length-1) ); // 't' çıktısı alınır.
alert( kelime.charAt(-1) ); // '' çıktısı alınır.
alert( kelime.charAt(100) ); // '' çıktısı alınır.
```

{% endcode %}

Fakat **`.charAt()`** metodu ile geçersiz veya negatif bir başvuru yaptığınızda boş değer elde edersiniz.

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript';
alert( kelime.charAt(1000) ); // '' çıktısı.
alert( kelime.charAt(-1) ); // '' çıktısı.
```

{% endcode %}

Bir karakter dizisinin tüm karakterlerine **`[ ]`** ile de erişebiliriz. Örnek

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript';
alert( kelime[0] ); // 'J' harfi çıktısı alınır.
alert( kelime[1] ); // 'a' harfi çıktısı alınır.
alert( kelime[kelime.length-1] ); // Son harf 't' harfi çıktısı alınır.
alert( kelime[-1] ); // 'undefined' çıktısı alınır.
alert( kelime[100] ); // 'undefined' çıktısı alınır.
```

{% endcode %}

Köşeli parantez içinde negatif sayı veya geçersiz başvuru kullanıldığında '**undefined**' değeri verir.

**`.charAt()`** metodu ile negatif veya geçersiz bir başvuru yaptığınızda boş değer elde edersiniz. Diğerleri ile arasındaki fark sadece budur.&#x20;

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript';
alert( kelime.charAt(100) ); // '' çıktısı.
alert( kelime.at(100) ); // 'undefined' çıktısı.
alert( kelime.[100] ); // 'undefined' çıktısı.
```

{% endcode %}

Bir **`string`**'te eriştiğiniz karakterin değerini tekil olarak değiştiremezsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript';
kelime.charAt(0) = 'H'; // hata fırlatır.
kelime.at(0) = 'H';  // hata fırlatır.
kelime.[0] = 'H';  // hata fırlatır.
alert(kelime); // hatalar yüzünden çalışmaz.
```

{% endcode %}

## `String`'i Dilimleme

> ### `.substring()` | `.slice()` | `.split()`

Bir karakter dizisinin alt karakterlerini **`.substring()`** metodu ile dilimleyebilirsiniz. **`.substring(baslama, bitis)`** olarak pozisyonları verilerek dilimlenir. **Bitiş parametresine kadar olan karakterler** dilimlenmiş olur. Bitiş parametresinin olduğu karakter katılmaz. Ayrıca bitiş parametresi vermek zorunlu değildir. Verilmezse dizinin sonuna kadar (**`.length`**) dilimler. Örnek.

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript Programalama Dili';
alert( kelime.substring(24) ); // Bitiş parametresi yok. Sona kadar gider: 'Dili'
alert( kelime.substring(4,10) ); // 4'ten 10'a kadar gider (10 dahil değil):'script'
```

{% endcode %}

**`.substring()`** metodu ile negatif parametreler verirseniz sıfır kabul eder. Ayrıca bitiş parametresini sıfır verirseniz parametreleri tersine çevirir.

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript Programalama Dili';
alert( kelime.substring(-250,4) ); // (0,4) kabul eder: 'Java' çıktısı verir.
alert( kelime.substring(4,0) ); // Parametreleri ters (0,4) çevirdi: 'Java'
alert( kelime.substring(4,-250) ); // Ters çevirdi (0,4): 'Java' çıktısı verir.
```

{% endcode %}

Bir karakter dizisinin alt karakterlerini **`.slice()`** metodu ile de dilimlenir. **`substring()`** ile farkı negatif sayılar da kabul etmesidir. Negatif sayılarda sağdan başlar fakat yine de soldan sağa doğru ilerleyerek dilimler. **`.slice(baslama, bitis)`** olarak parametreleri verilir.

{% code lineNumbers="true" %}

```javascript
let kelime = 'Javascript Programalama Dili';
alert( kelime.slice(0,4) ); //'Java'
alert( kelime.slice(24) ); // 'Dili'
alert( kelime.slice(-4,-1) ); // 'Dil' son karakteri dilemez.
alert( kelime.slice(-28, -24) ); // Ters çevirdi (0,4): 'Java' çıktısı verir.
```

{% endcode %}

**`.split()`** metodu ile bir karakter dizisini belirli karakterlerden ayırmamıza yarar. Fakat elde edilen **değişken tipi string olmaz.**

```javascript
let kelime = 'Türkiye Büyük Millet Meclisi';
alert( kelime.split(' ') ); //Boşluklardan böldük. Çıktı: Türkiye,Büyük,Millet,Meclisi
alert( kelime.split('i') ); //'i'lerden böldük. Çıktı: Türk,ye Büyük M,llet Mecl,s,
```

Bir değişkene atarsak yeni değişken tipinin **`object`** (nesne) olduğunu görebiliriz.

```javascript
let kelime = 'Türkiye Büyük Millet Meclisi',
    yeni = kelime.split(' ');
alert( typeof(yeni) ); // 'object' çıktısı verir
```

{% hint style="info" %}
Yukarıdaki metotlar ile genel olarak karakter dizilerinin içindeki ***alt karakterler*** üzerinden işlemler yapılır. Yani aradığınız karakterler aynen olduğu gibi karakter dizisinin içinde aranır ve sonuç birebir eşleşme üzerinden çıkar. Peki siz çeşitli şekillerdeki yazımı (büyük, küçük vb.) fark etmeksizin bir ifadeye erişip işlem yapmak istiyorsanız ?

Bu durumda Düzenli İfadeler (Regular Expressions) ile işlemler yapmanız gerekir. İleri konularda [Düzenli İfadeler](/javascript-egitimi/duzenli-ifadeler-regular-expressions.md) işlenecek.
{% endhint %}

## Birleştirme, Kırpma, Tekrar Etme

> **`.concat()`** | **`.trim()`** | **`.trimStart()`** | **`.trimEnd()`** | **`.repeat()`**

Karakter dizilerini **`.concat()`** metodu ile birleştirebilirsiniz. Parametre olarak istediğiniz kadar string verebilirsiniz.

{% code lineNumbers="true" %}

```javascript
let str1 = 'Türkiye';
let str2 = 'Büyük';
let str3 = 'Millet';
let str4 = 'Meclisi';
let kelime = ''; //boş bir string tanımladık.
kelime = kelime.concat(str1,' ',str2,' ',str3,' ',str4);
alert(kelime);
// Daha kısa ifadeyle
//kelime = str1.concat(' ',str2,' ',str3,' ',str4);
```

{% endcode %}

**`.concat()`** metodu yerine matematiksel toplama yöntemi de yapılabilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let str1 = 'Türkiye';
let str2 = 'Büyük';
let str3 = 'Millet';
let str4 = 'Meclisi';
let kelime = str1 + ' ' + str2 + ' ' + str3 + ' ' + str4;
alert(kelime);
```

{% endcode %}

**`.trim()`** metodu ile bir karakter dizisinin başındaki ve sonundaki tüm boşlukları silebilirsiniz. Sadece baştakiler için **`.trimStart()`** sadece sondakiler için **`.trimEnd()`** metotlarını kullanabilirsiniz. Örnek.

```javascript
let kelime = '   Merhaba   Javascript    ';
alert( kelime.trim() ); // 'Merhaba   Javascript'
alert( kelime.trimStart() ); // 'Merhaba   Javascript    '
alert( kelime.trimEnd() ); // '   Merhaba   Javascript'
```

Bir karakter dizisini n kere tekrar ettirmek için **`.repeat()`** metodu kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let selam = 'Merhaba ';
alert( selam.repeat(3) ); // 'Merhaba Merhaba Merhaba '
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hanuce.gitbook.io/javascript-egitimi/ilkel-primitive-veri-tipleri/string-karakter-dizisi/string-metotlari.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
