replace ve replaceFirst, bir metin üzerinde değiştirmek istediğimiz kısımların, değiştirilmiş halinden oluşan yeni bir metin elde etmemizi sağlayan String sınıfı metotlarıdır. replace, bulduğu her eşleşmeyi değiştirirken, replaceFirst sadece bulduğu ilk eşleşmeyi değiştirir. Bir başka deyişle “metinlerin içerisinde belirli bir karakter yada karakterler grubunu, belirli bir karakter ya da karakterler grubu ile değiştirmeye yarar” denilebilir. Fakat yaptığımız bu tanımlardaki “değiştirmek” kelimesi, mevcut dize üzerinde bir değişiklik yapıldığı algısı oluşturmamalıdır.
Replace metotları, çağırıldığı String nesnesi üzerinde herhangi bir değişiklik yapmaz.
Bu tanım, üzerinde çağırıldığı String nesnesinin “null” olması haricinde iki durum ile açıklanabilir;
- Metinde değişiklik yapılacak en az bir eşleşme bulunmuştur;
- Bu durumda değişiklik yapılmış veriye sahip yeni bir String nesnesi oluşturulur ve onun referansı döndürülür.
- Metinde değişiklik yapılacak herhangi bir eşleşme bulunmamıştır;
- Bu durumda üzerinde çağırıldığı String nesnesinin referansı döndürülür.
Her ikisi için de geçerli olmak üzere replace ve replaceFirst metotlarının kullanımı;
String atanacagiReferansDegiskeni = orijinalDizeReferansi.replace(arananDeger, yeniDeger); şeklindedir.
- replace;
- replace(char oldChar, char newChar)
- replace(CharSequence target, CharSequence replacement)
- replaceFirst
- replaceFirst(String regex, String replacement)
Yukarıdaki kullanım şekillerinden anlaşılacağı üzere replace char veya CharSequence argümanlar ile kullanılırken, replaceFirst sadece String tipinde argümanlar ile kullanılır. CharSequence arayüzü String sınıfının implement ettiği bir arayüz olduğundan replace metodu String argümanlar ile de kullanılabilir. Fakat replaceFirst metodu char argümanlar ile kullanılamaz.
public class StringReplaceExample {
public static void main(String[] args) {
// replace ÖRNEK-1
String ref1 = "Tam Weblik JAVA!";
String ref2 = ref1.replace(' ', '.');
System.out.println(ref2);
// Çıktısı: Tam.Weblik.JAVA!
// replace metodu, her ' ' (boşluk) karakteri yerine
// '.' (nokta) karakteri içeren yeni bir String nesnesi döndürür.
// replace ÖRNEK-2
String ref3 = ref1.replace('A', '-');
System.out.println(ref3);
// Çıktısı: Tam Weblik J-V-!
// replace metodu, her 'A' karakteri yerine
// '-' karakteri içeren yeni bir String nesnesi döndürür.
// BÜYÜK/küçük harf duyarlı olduğundan 'a' karakterlerini değiştirmez.
// replace ÖRNEK-3
String ref4 = ref1.replace("Tam Weblik", "tamweblik.com -");
System.out.println(ref4);
// Çıktısı: tamweblik.com - JAVA!
// replace metodu, metin içerisindeki "Tam Weblik" karakterler grubu yerine
// "tamweblik.com -" karakterler grubunu içeren
// yeni bir String nesnesi döndürür.
}
}
replaceFirst metodu, replace metodu gibi tüm eşleşmeler için değil, sadece ilk eşleşme için istenen değişikliği yapar.
public class StringReplaceFirstExample {
public static void main(String[] args) {
// replaceFirst ÖRNEK-1
String ref1 = "Tam Weblik JAVA!";
String ref2 = ref1.replaceFirst("A", ".");
System.out.println(ref2);
// Çıktısı: Tam Weblik J.VA!
// replaceFirst metodu, ilk "A" harfi yerine
// "." (nokta) işaretini içeren yeni bir String nesnesi döndürür.
// BÜYÜK/küçük harf duyarlı olduğundan "a" harfini değiştirmez.
// replaceFirst ÖRNEK-2
String ref3 = ref1.replaceFirst(" ", "-");
System.out.println(ref3);
// Çıktısı: Tam-Weblik JAVA!
// replaceFirst metodu, ilk " " (boşluk) yerine
// "-" işareti içeren yeni bir String nesnesi döndürür.
// Bu nedenle ref1 ve ref3 ayrı nesneleri gösteren iki ayrı
// referans değişken olur.
System.out.println(ref1 == ref3);
// Çıktısı: false
// replaceFirst ÖRNEK-3
String ref4 = ref1.replaceFirst("tam", "tamweblik.com -");
System.out.println(ref4);
// Çıktısı: Tam Weblik JAVA!
// replaceFirst metodu, metin içerisinde "tam" karakterler grubu olmadığından
// uygulandığı nesnenin referansını döndürür.
// ref1 ve ref4 aynı nesneyi gösteren iki ayrı referans değişken olur.
System.out.println(ref1 == ref4);
// Çıktısı: true
}
}