Java Replace ve Replaceall metodu farkı nedir?

nc.abidin

Hectopat
Katılım
8 Şubat 2021
Mesajlar
363
Çözümler
3
Daha fazla  
Cinsiyet
Erkek
Java'da string sınıfında replace ve replaceall metotları bulunmaktadır. Bu metodlar gördüğüm kadarıyla aynı işi yapıyorlar ama benim gördüğümün dışında farkları var ki böyle bir ayrım yapmışlar. İşte merak ettiğim bu fark nedir?

Okuduğum şeyleri de tam olarak kafamda canlandıramadığım için bana bu farkı anlayabileceğim bir şekilde anlatabilecek var mı?

docs.oracle.com'da böyle tanımlanmış.

1686166226829.png


Teşekkür ederim.
 
Son düzenleyen: Moderatör:
Konuyu yanlış anlamışım düzeltiyorum o nedenle, replace() metodu RegEx kabul etmiyor ancak replaceAll() metodu RegEx ile çalışabiliyor sanırım aralarındaki fark bu.
 
Son düzenleme:
Java'da string sınıfında replace ve replaceall metotları bulunmaktadır. Bu metodlar gördüğüm kadarıyla aynı işi yapıyorlar ama benim gördüğümün dışında farkları var ki böyle bir ayrım yapmışlar. İşte merak ettiğim bu fark nedir?

Okuduğum şeyleri de tam olarak kafamda canlandıramadığım için bana bu farkı anlayabileceğim bir şekilde anlatabilecek var mı?

docs.oracle.com'da böyle tanımlanmış.

Eki Görüntüle 1811335

Teşekkür ederim.
Java bilmiyordum ama "replaceAll" sanırım regex kullanıyor. Fark bu.

Replace bulduğu ilk şeyi replace eder sadece, bir cümlede aynı hedef substring'den birden fazla varsa sadece 1 tanesini replace eder, örneğin şöyle bir string'imiz olduğunu varsayalım.

Hello world yazarken world yazmayı kesinlikle unutmayın, yoksa hello'nun bir manası kalmaz.

Bu string'deki world kelimelerini "dünya" ile değiştirmek isteseydik ve bunun için replace kullansaydık bu fonksiyon sadece ilk world'ü değiştirecek, 2.world olduğu gibi kalacaktı.

Ancak ReplaceAll bulduğu tüm world kelimelerini dünya ile değiştirir.


Buradan kendin de deneyebilirsin.
Bu JavaScript 🥱.
 
Replace bulduğu ilk şeyi replace eder sadece, bir cümlede aynı hedef substring'den birden fazla varsa sadece 1 tanesini replace eder, örneğin şöyle bir string'imiz olduğunu varsayalım.

Hello world yazarken world yazmayı kesinlikle unutmayın, yoksa hello'nun bir manası kalmaz.

Bu string'deki world kelimelerini "dünya" ile değiştirmek isteseydik ve bunun için replace kullansaydık bu fonksiyon sadece ilk world'ü değiştirecek, 2.world olduğu gibi kalacaktı.

Ancak ReplaceAll bulduğu tüm world kelimelerini dünya ile değiştirir.
Söylediğiniz şey geçerli gözükmüyor.

1686167707616.png
1686167726476.png
 
Biri tek bir char karakteri için, biri char dizisi için sonuncusu da verilen regular exp'e göre değiştirilmesi gereken yeri değiştiriyor. Gayet açık aslında temel veri türlerine ve function overloading'e bir göz atmanı tavsiye ederim, kolay gelsin.
 
Özür dilerim dostum JavaScript sandım ben konuyu, benim hatam. Yanlış bilgi vermek istemem Java pek okumadım o yüzden hiç bir şey söylemesem daha iyi bilen arkadaşlar yardımcı olsunlar.

Biri tek bir char karakteri için, biri char dizisi için sonuncusu da verilen regular exp'e göre değiştirilmesi gereken yeri değiştiriyor. Gayet açık aslında temel veri türlerine ve function overloading'e bir göz atmanı tavsiye ederim, kolay gelsin.
Ama replace() substring de replace edebiliyor gördüğüm kadarıyla. Yani replace("hello", "world") yapsak bu işlemi yerine getiriyor. Bu durumda sanırım aralarındaki fark birinin RegEx ile çalışabiliyor diğerinin çalışamıyor olması. Doğru mudur?

Dokümanları okuduğumda tek farkın bu olduğunu görüyorum.
 
Son düzenleme:
Biri tek bir char karakteri için, biri char dizisi için sonuncusu da verilen regular exp'e göre değiştirilmesi gereken yeri değiştiriyor. Gayet açık aslında temel veri türlerine ve function overloading'e bir göz atmanı tavsiye ederim, kolay gelsin.
Teşekkür ederim. Farklı veri türlerine göre overloading yaptığının ve ona göre çalıştığının farkındayım.

Ama şu ana kadar yazdığım kodlarda ve denediğim örneklerde her iki metod da (replace ve replaceAll) aynı şekilde programı çalıştırdı ve hep aynı sonucu verdiler.

Ne tür bir kullanımda ikisi birbiri yerine kullanılamaz diye merak ediyorum.
 
Ne tür bir kullanımda ikisi birbiri yerine kullanılamaz diye merak ediyorum.
RegEx ile replace etmek istediğinde replace() kullanılamaz, çünkü fonksiyon string param istiyor. RegEx kullanmak istediğin zaman replaceAll() kullanman gerekiyor, okuduğum tüm dokümanlar bu şekilde söylüyor. Basit bir testle anlayabilirsin bunu, bence aralarındaki fark budur.
 
Teşekkür ederim. Farklı veri türlerine göre overloading yaptığının ve ona göre çalıştığının farkındayım.

Ama şu ana kadar yazdığım kodlarda ve denediğim örneklerde her iki metod da (replace ve replaceAll) aynı şekilde programı çalıştırdı ve hep aynı sonucu verdiler.

Ne tür bir kullanımda ikisi birbiri yerine kullanılamaz diye merak ediyorum.
regular exp'i arastir.

Java:
String test = "aaaaaaa1aaaaaa2aaaaaaaaa";
System.out.println(test.replaceAll("[0-9]","3"));
System.out.println(test.replace("[0-9]","3"));
 

Yeni konular

Geri
Yukarı