/*
   Insan Java Ogrenir YouTube kanali.
   002 Türkçe Java Dersleri : String sınıfı ve bazı String metodları
   
   07 ARA 2019 Cumartesi.
   
   StringSinifi.java
    
   Telegram kanalimiz : https://t.me/insanjavaogrenir
   
   Telegram grubumuz : https://t.me/insanjavaogrenirgrup
   
*/
public class StringSinifi {
	public static void main (String[] args) {
						
		String sultan = "Yavuz";
		String sair = "Vehbi";
		
		String birinci_misra = "Bütün dünya benim olsa gamım gitmez nedendir bu?";
		
		String ikinci_misra = "Ezelden gam turâbıyla yoğrulmuş bir bedendir bu.";
		
		String ayrac = "----------------  ***  -----------------\n\n";
		
		System.out.println(birinci_misra);
		System.out.println(ikinci_misra);
		System.out.println(ayrac);
		
		
		// String 'lerde özel karakterler.
		//   \' 	' 	tek tirnak
		//   \" 	" 	çift tirnak
		//   \\ 	\ 	ters slas
		//   \t		paragraf basi kadar bosluk (sekme) birakir
		//   \r		satir sonu oldugunu belirten karakterdir
		//   \n		yeni satira geçmek için kullanilan karakterdir.
				
		System.out.println("String\'lerle ilgili özel karkterler");
				
		String cift_tirnak = "\"Yaraların, ışığın içeri girdiği yerdir.\" (Mevlana)";
		String tek_tirnak =  "Sessizlik Yaradan\'ın sesidir. (Mevlana)";
		String ters_taksim = "Ters taksim isareti : \\ (nam-i diger \"backslash\")";
				
		System.out.println(cift_tirnak);
		System.out.println(tek_tirnak);
		System.out.println(ters_taksim);
		System.out.println(ayrac);
		

		// String'lerde + operatörü.
		
		System.out.println("String\'de + operatörü kelime gruplarini birbirine ekler. ");
		System.out.println(birinci_misra + "  (" + sultan + ")");
		System.out.println(ikinci_misra + "  (" + sair + ")\n");
		
		System.out.println("String\'de + operatörü : Sayisal görünse bile");
		String x = "10";
		String y = "20";
		String z = x + y;   // z nin degeri 1020 olacak ama sayisal degil metin olarak.
		
		System.out.println("z = " + z);
		System.out.println(ayrac);

		
		// .concet(String kelam)
		// + operatoru gibi bu da kelime gruplarini bir birine ekler.
		
		System.out.println(".concat() metodu : kelime gruplarini birbirine ekler.");
		
		String beyit = birinci_misra.concat("\n").concat(ikinci_misra);
		
		System.out.println(beyit);
		System.out.println(ayrac);

		String beyit_kulliyen = birinci_misra.concat("   (").concat(sultan).concat(")").concat(")\n").concat(ikinci_misra).concat("   (").concat(sair).concat(")");
		
		System.out.println(".concat() metodu ile yazanlari da ekleyelim.");
		System.out.println(beyit_kulliyen);
		System.out.println(ayrac);

		
		// .charAt(int indeks) metodu
		
		// String birinci_misra = "Bütün dünya benim olsa gamım gitmez nedendir bu?";
		
		System.out.println(".charAt() metodu : String içinde verilen indeksteki tek harfi alir.");
		
		System.out.print(birinci_misra.charAt(6));	// d harfi
		System.out.print(birinci_misra.charAt(13));	// e harfi
		System.out.print(birinci_misra.charAt(16));	// m harfi
		System.out.print(birinci_misra.charAt(15));	// i harfi
		System.out.println(birinci_misra.charAt(43));//r harfi
		System.out.println(ayrac);

	
		// .contains(String kelam) metodu
		
		System.out.println(".contains() metodu : true / false deger döndürür");
		
		System.out.println(birinci_misra.contains("gam"));
		System.out.println(ayrac);
		
		String sehir = "Istanbul";
		String aranacak_dizin = "bul";
		
		System.out.println(sehir.contains(aranacak_dizin));
		System.out.println(sehir.concat(" kelimesi içinde \"bul\" bulundu!"));
		System.out.println(ayrac);
		
		
		// .toUpperCase() ve .toLowerCase() metodu

		System.out.println(".toUpperCase() (büyük harf) ve \n.toLowerCase() (küçük haf) dönüstürmeler.");
		
		System.out.println(birinci_misra.toLowerCase());
		System.out.println(ikinci_misra.toUpperCase());
		System.out.println(ayrac);

		
		// .replace(String kelam_bul, String kelam_degistir) metodu
		// Kelimeyi degistirme
		// Metodun uygulandığı string içerisinde karakter yada karakter gruplarının değiştirmeyi sağlar.
		
		System.out.println(".replace() bul degistir islemi yapar.");
		System.out.println(birinci_misra.replace("nedendir", "niçindir"));
		System.out.println(ikinci_misra.replace("turâbıyla", "topragiyla"));
		System.out.println(ayrac);

		
		// .trim() metodu
		// String lerin başındaki ve/veya sonundaki tüm boşlukları siler.
				
		System.out.println(".trim() bosluklari siler.");
		String mailadresi = "      username@uzaydabiryer.com           " ;
		System.out.println("Kullanici mail adresi (Orijinal) : " + mailadresi);
		System.out.println("Kullanici mail adresi (.trim())  : " + mailadresi.trim());
		System.out.println(ayrac);

		
		/*
		    .substring(int x) kullanimi...
		    String'leri bazen parçalamamız gerekebilir, bu durumda 
		    subString() metodunu kullanırız. İki farklı kullanımı vardır; 
		    tek parametre verildiğinde o sayıdan sonraki karakter kümesini almamızı sağlar,
		    iki parametre verildiğinde ise ilk parametreden başlayarak 
		    ikinci parametre sayısınca karakter kümesini elde etmemizi sağlar.
		*/
		
		System.out.println(".substring() String leri parçalariz.");

		System.out.println(birinci_misra.substring(18));  // 18 den sonrasini yazdirir.
		System.out.println(ikinci_misra.substring(22, 41));  // 22-41 arasini yazdirir.
		System.out.println(ayrac);

		
		// .startsWith(String kelam) -ile basliyormu kontrol eder.
		// verilen string ile basliyorsa true döndürür degilse false
		
		System.out.println(".startsWith() -ile basliyorsa true / degilse false.");
		System.out.println("Ikinci Misra :\n"+ikinci_misra);
		System.out.println(ikinci_misra.startsWith("Ezel"));
		System.out.println(ayrac);

		
		// .endsWith(String kelam) -ile mi bitiyor kontrol eder.
		// verilen string ile bitiyorsa true döndürür degilse false
				
		System.out.println(".endsWith() -ile bitiyorsa true / bitmiyorsa false.");
		System.out.println("Birinci Misra :\n"+birinci_misra);
		System.out.println(birinci_misra.endsWith("?"));
		System.out.println(ayrac);
		
		
		// .indexOf(String kelam) String içindeki adresini verir.
		// verilen string veya karakterin String içindeki baslangiç noktasini verir.
						
		System.out.println(".indexOf() arananin String içindeki baslangiç noktasini verir.");
		System.out.print(birinci_misra + "\n\"dünya\" kelimesin baslangiç noktasi: ");
		System.out.println(birinci_misra.indexOf("dünya"));
		System.out.println(ayrac);

			
		// .lastIndexOf(String kelam) String içindeki bulunan son adresini verir.
		// verilen string veya karakterin String içindeki rastlanan en son baslangiç noktasini verir.
								
		System.out.println(".lastIndexOf() arananin String içindeki son baslangiç noktasini verir.");
		System.out.print(birinci_misra + "\nson \"m\" harfinin baslangiç noktasi: ");
		System.out.println(birinci_misra.lastIndexOf("m"));
		System.out.println(ayrac);

		 
		//	.split(String kelam) Iki kullanim sekli vardir :
		//	1) String içindeki belli bi karakteri referans alarak String 'i parçalar.
		//	2) String içindeki belli bir karakteri referans alarak String 'i
		//		kaç parça alacagini limitlendiririz.
			
		
		System.out.println(".split() String içindeki belli bi karakteri referans alarak String 'i parçalar.");
		System.out.println("\"bosluk\" karakterini referans alarak misrayi parçalar.");
		
		String bm_kelimeleri[]= birinci_misra.split(" ");
		System.out.println(bm_kelimeleri[0]);	// 1. kelime
		System.out.println(bm_kelimeleri[1]);	// 2. kelime
		System.out.println(bm_kelimeleri[2]);	// 3. kelime
		System.out.println(bm_kelimeleri[3]);	// 4. kelime
		System.out.println(bm_kelimeleri[4]);	// 5. kelime
		System.out.println(bm_kelimeleri[5]);	// 6. kelime
		System.out.println(bm_kelimeleri[6]);	// 7. kelime
		System.out.println(bm_kelimeleri[7]);	// 8. kelime
		
		System.out.println("\n.split(\" \", 3) String içindeki \"bosluk\" karakterini");
		System.out.println("referans alarak, 3 parçaya ayiri.");
		
		String im_kelimeleri[]= ikinci_misra.split(" ", 3); // 3 ten fazla bölme demis oluyoruz.
		System.out.println(im_kelimeleri[0]);	// 1. kelime
		System.out.println(im_kelimeleri[1]);	// 2. kelime
		System.out.println(im_kelimeleri[2]);	// 3. kelime ve devami...
		
		System.out.println(ayrac);
		
		
		// .compareTo() iki String'i alfabetik siraya gore (sözlüksel biçimde) karsilastirir.
		// int deger döndürür.
		// deger 0 ise kelimeler esit demektir.
		// deger - ise ilk kelime önce gelir.
		// deger + ise ikinci keime önce gelir.
		
		System.out.println(".compareTo() kalem <-> kalem karsilastirilir.");
		System.out.println("0 deger döndürür çünkü kalem ile kalem esittir.");
		
		String kelime_x = "kalem";
	    String kelime_y = "kalem";
	    System.out.println(kelime_x + " <-> " + kelime_y + " = " +kelime_x.compareTo(kelime_y)); 

			
	    // .compareToIgnoreCase() iki String'i buyuk/kuçuk harf duyarliligi olmaksizin karsilastirir.
	    // int deger döndürür.
	    // deger 0 ise kelimeler esit demektir.
	    // deger -1 ise ilk kelime önce gelir.
	    // deger +1 ise ikinci keime önce gelir.
	 		
	    String kelime_a = "KALEM";
	 	String kelime_b = "kalem";
	 	
	 	System.out.println("\n.compareToIgnoreCase() "+ kelime_a +" <-> "+ kelime_b +" karsilastirilir.");
		System.out.println("0 deger döndürür çünkü buyuk/kucuk harf esitlendi.");
		
	 	System.out.println(kelime_a + " <-> " + kelime_b + " = " +kelime_a.compareToIgnoreCase(kelime_b)); 
		System.out.println(ayrac);


		// .regionMatches() x, String, a, l : 
		// x adresinden basla
	    // String'in a adresinden l kadar dizgiyi karsilastir :)
		// true/false dondurur.
	 		
	 	String kelime_m = "Tahtakale";
	 	String kelime_n = "Çanakkale";
	 	System.out.println(kelime_m + "\'nin 5\'inden basla ve "+ kelime_n+"\'nin 5\'inden itibaren 3 karakteri karsilastir.");
	    System.out.println(kelime_m.regionMatches(5, kelime_n, 5, 3)); 
		System.out.println(ayrac);
	
		
		// .codePointAt(int index) indeks'deki karakterin unicode degerini int olarak döndürür. 
		
		String kelime = "Altunizade";  // 0-1-2-3 : 3 numarali karakter u
		System.out.println(kelime + " kelimesinin 3 numarali karakterinin UNICODE degerini yazdirir.");
	    int result = kelime.codePointAt(0);
	    System.out.println(result);
		System.out.println(ayrac);

		
	}

}
