public static String capitalize(String source)
{
return new StringBuilder().append((source.charAt(0) + "").toUpperCase()).append(source.substring(1).toLowerCase()).toString();
}
Java'daki String'ler immutable'dır bu yüzden + (concat) ile String birleştirmek belleği şişirir.
public class StringTest
{
public static void main(String[] args)
{
long now = System.currentTimeMillis();
strConcat();
System.out.println("Concat elapsed " + (System.currentTimeMillis() - now) + " ms");
now = System.currentTimeMillis();
strBuild();
System.out.println("StringBuilder elapsed " + (System.currentTimeMillis() - now) + " ms");
}
private static void strBuild()
{
StringBuilder s = new StringBuilder();
for(int i=0;i<100000;i++)
s.append("*");
}
private static void strConcat()
{
String s = "";
for(int i=0;i<100000;i++)
s+="*";
}
}
Concat elapsed 4232 ms
StringBuilder elapsed 2 ms
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a string: ");
String str = scanner.nextLine();
String output = str.substring(0, 1).toUpperCase() + str.substring(1);
System.out.println(output);
StringUtils.capitilalize("bursa") %99 ihtimalle cozecek bu."bursa".capitalize() -> bu kadar. ( Kotlin capitalize metodu locale parametresi de aliyor opsiyonel olarak ve null check yapiyor )Evet moderatör sağ olsun yanlış yazılmış diye silmiş örneklerimi. Büyüklü küçüklü , boşluklu falan girebilir bunların hepsini düzeltecek. Şöyle bir kod kullandım ;Yazilanlar genelde dogru olsa da ufak edge-case ler var.
1) Ilk harf buyuk, geri kalan kucuk dedigine gore string'in kalanini lowercase yapmalisiniz. Belki tamami buyuk harf geldi?
2) Case degistirme islemi default Locale uzerinden yapilir. Explicit bunu belirtmezseniz region'i farkli ayarlanmis cihazlarda calismlar. istanbul'u Istanbul diye yazar ( İstanbul yerine ).
- Eger kucuk harf geliyorsa String ve locale endisesi yoksa Apache StringUtils en iyisi.
StringUtils.capitilalize("bursa")%99 ihtimalle cozecek bu.
- Eger ben yazicam diyorsan da ve String buyuklu kucuklu gelecekse once hepsini lowercase(locale.tr) yapip sonra ilk harfini uppercase(locale.tr) yapabilirsin.
- Kotlin kullanin"bursa".capitalize()-> bu kadar. ( Kotlin capitalize metodu locale parametresi de aliyor opsiyonel olarak ve null check yapiyor )
capitalize , capitalizefully dökümanlarını okumuştum ama koduma yedirememiştim bende üstteki gibi çözüm buldumModeratör yazıyı düzenlemiş normalde büyüklü küçüklü ve arada boşluklu falan örnek yazmıştım.
Evet moderatör sağ olsun yanlış yazılmış diye silmiş örneklerimi. Büyüklü küçüklü , boşluklu falan girebilir bunların hepsini düzeltecek. Şöyle bir kod kullandım ;
hasta_il = hasta_il.substring(0,1).toUpperCase()+hasta_il.substring(1).toLowerCase().replaceAll("\\s",""); Boşlukları siliyor ve ilk harf dışında her şeyi küçültüyor.
Eger sorununu cozuyorsa devam et bence, bu konuda cok fazla detay durum olusturulabilir. Programlama bulmacasi degil de gercek hayata dair bir is pesindesin gibi geldi bu mesajindan.Moderatör yazıyı düzenlemiş normalde büyüklü küçüklü ve arada boşluklu falan örnek yazmıştım.
Evet moderatör sağ olsun yanlış yazılmış diye silmiş örneklerimi. Büyüklü küçüklü , boşluklu falan girebilir bunların hepsini düzeltecek. Şöyle bir kod kullandım ;
hasta_il = hasta_il.substring(0,1).toUpperCase()+hasta_il.substring(1).toLowerCase().replaceAll("\\s",""); Boşlukları siliyor ve ilk harf dışında her şeyi küçültüyor.
capitalize , capitalizefully dökümanlarını okumuştum ama koduma yedirememiştim bende üstteki gibi çözüm buldum
" i s t A n b u l "
String hasta_il = "aNkAra";
if (hasta_il.contains(" ") == true) {
hasta_il = hasta_il.replace(" ", "");
hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase();
} else {
hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase();
}
Calisir bu sekilde de. Ama ben bu kodu da review'dan gecirmezdim sahsen : ) Cunku sadece sehir isimleri icin calisir. Turkiye'de 2 kelimelik sehir ismi olmadigi icin ( "New York City" gibi ) calisacak. Ayni fonksiyonu ilce isimleri icin kullanamazsin, cunku 2 kelime arasindaki boslugu da replace ediyorsun. "fevzi cakmak bulvari" -> "Fevzicakmakbulvari" olacak.Java:String hasta_il = "aNkAra"; if (hasta_il.contains(" ") == true) { hasta_il = hasta_il.replace(" ", ""); hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase(); } else { hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase(); }
@bitwise Bu şekilde yapılsa?
String hasta_il = "aNkAra";
if(hasta_il.contains(" ")){
hasta_il = hasta_il.replace(" ", "");
}
hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase();
String hasta_il = "aNkAra";
hasta_il = hasta_il.replace(" ", "");
hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase();
"aNkAra".capitalize() yaziyorsun ve bitiyor.Cevabınız için teşekkür ederim, eğer boş vaktiniz olursa Java ile yapmayı deneyebilir misiniz rica etsem? Çünkü bahsettiğiniz şeylerden birini yapsam mesela biri patlıyor.Calisir bu sekilde de. Ama ben bu kodu da review'dan gecirmezdim sahsen : ) Cunku sadece sehir isimleri icin calisir. Turkiye'de 2 kelimelik sehir ismi olmadigi icin ( "New York City" gibi ) calisacak. Ayni fonksiyonu ilce isimleri icin kullanamazsin, cunku 2 kelime arasindaki boslugu da replace ediyorsun. "fevzi cakmak bulvari" -> "Fevzicakmakbulvari" olacak.
Ilce/mahalle/bulvar isimleri icin ayri bir fonksiyon yazacaksan DRY prensibine aykiri davranmis olacagiz.
Bir de contains == true yapmana gerek yok; if - else icinde identical kod blogu varsa onlari bloga almana gerek yok, zira condition'a bagli degil demektir. Su sekilde sadelestirilebilir:
Java:String hasta_il = "aNkAra"; if(hasta_il.contains(" ")){ hasta_il = hasta_il.replace(" ", ""); } hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase();
String.replace() ilgili regex olmasa da calisir, onun icin contains check'i yapmana da gerek yok, gereksiz performans kaybi. ( replace kendi icinde contains checki yapiyor cunku )
Sonuc olarak su sekilde en sade halini aliyor:
Java:String hasta_il = "aNkAra"; hasta_il = hasta_il.replace(" ", ""); hasta_il = hasta_il.substring(0, 1).toUpperCase() + hasta_il.substring(1).toLowerCase();
Tavsiyem Kotlin,"aNkAra".capitalize()yaziyorsun ve bitiyor.