Codegym Üniversitesi kursunun bir parçası olarak bir akıl hocası ile bir ders parçası. Tüm kurs için kaydolun.


"Selamlar, Amigo. Bir zamanlar, bir karakter dizisini kod olarak yazmak için, onları çift tırnak içine almanız gerektiğini öğrendiniz."

"Evet ve bu bize bir dize değişmezi veriyor . Bunu öğrenmem çok uzun zaman önce değildi."

"Bizim mesleğimizde bu çok uzun zaman önceydi. Ama şu an konumuz bu değil. Bunun yerine, bir dizgi değişmezi içinde tırnak işaretleri kullanmamız gerekirse lütfen bana ne yapacağımı söyle?"

"Hmm... Tırnak işaretleri içeren bir dize - daha kolay ne olabilir. Eminim bir yolu vardır..."

"Evet. Metni görüntülemek istediğimizi varsayalım "Friends" was nominated for an "Oscar". Bunu nasıl yapardık?"

"Dürüst olmak gerekirse hiçbir fikrim yok. Aklıma hiçbir şey gelmiyor."

"Mantıkla bir çözüme varamazsın. Sana ne yapman gerektiğini göstereyim.

kod notlar
String s = ""Friends" was nominated for an "Oscar"";
Bu seçenek işe yaramayacak!"

"Bu seçenek çalışmaz, çünkü derleyici bunu tamamen farklı bir kod olarak yorumlar:

kod notlar
String s = ""Friends" was nominated for an "Oscar"";
Bu seçenek işe yaramayacak!"

"Derleyici, kodda çift tırnak işaretiyle karşılaştıktan sonra, sonrakini bir dize değişmezinin başlangıcı olarak ele alır. Bir sonraki çift tırnak işareti, dize değişmezinin sonunu gösterir."

"Öyleyse, bir değişmezin içine nasıl çift tırnak yazarsınız?"

"Bunun bir yolu var. Buna kaçış karakterleri denir . Metin dizisinin içine tırnak işaretlerini yazmanız yeterlidir. Tırnakların önüne de \ ( ters eğik çizgi ) sembolünü eklersiniz.

"Düzgün yazıldığında dize hazır bilgisi şöyle görünür:

kod notlar
String s = "\"Friends\" was nominated for an \"Oscar\"";
Bu çalışacak!

"Derleyici her şeyi doğru yorumlayacak ve ters eğik çizgiden sonraki tırnak işaretini normal bir tırnak işareti olarak kabul etmeyecektir.

"Ayrıca, ekrana bu dizeyi gönderirseniz, ters eğik çizgili alıntılar doğru işlenecek ve metin ters eğik çizgi olmadan görüntülenecektir:"Friends" was nominated for an "Oscar"

"Pekala, bunun çok uygun olduğunu söylemeyeceğim..."

"Ama ne yapabilirsin, kurallar bunlar. Bir başka önemli nokta. Başında ters eğik çizgi olan bir tırnak işareti tek bir karakteri temsil eder: biz sadece derleyicinin dizimizdeki değişmezleri tanıma becerisini engellemeyen kaygan notasyon kullanıyoruz. Bir değişkene tırnak işaretleri atayabilirsiniz char:

kod notlar
char c = '\"';
\"bir karakter, iki değil
char c = '"';
Bu da mümkündür: tek tırnak içinde çift tırnak işareti

Karakterlerden kaçarken ortaya çıkan yaygın durumlar

"Çift tırnaklara ek olarak, derleyicinin özel bir şekilde işlediği başka birçok karakter vardır. Örneğin, satır sonu.

"Bir değişmeze nasıl satır sonu ekleriz? Bunun için özel bir kombinasyon da vardır:

\n
Satır sonu karakteri

"Bir dize hazır bilgisine bir satır sonu eklemeniz gerekirse, sadece birkaç karakter ekleyin" \n.

Örnek:

kod Konsol çıkışı
System.out.println("Best regards, \n Anonymous");
             
Best regards,
Anonymous

"Bunun gibi kaçış dizileri olarak da adlandırılan toplam 8 özel kombinasyon var . İşte bunlar:

kod Tanım
\t Sekme karakteri ekle
\b Geri alma karakteri ekleme
\n Yeni satır karakteri ekle
\r Satır başı karakteri ekleme
\f Sayfa besleme karakteri ekleme
\' Tek bir tırnak işareti ekleyin
\" çift ​​tırnak işareti ekleyin
\\ ters eğik çizgi ekle

"Bana zaten ikisini gösterdin. Diğer 6 ne anlama geliyor?"

"Şimdi hepsini açıklayacağım.

\tbir sekme karakteridir

TabBu metin metin içinde göründüğünde, yazarken tuşa basmakla eşdeğerdir . Onu takip eden metni kaydırır ve metni hizalamayı mümkün kılar.

Örnek:

kod Konsol çıkışı
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\b'bir karakter geri git' anlamına gelir

BackspaceBir dizideki bu sıra, klavyedeki tuşa basmaya eşdeğerdir . Kendisinden önce gelen karakteri kaldırır:

kod Konsol çıkışı
System.out.println("Hello\b\b World");
Hel World

\rsatır başı karakteridir

Bu karakter, metni değiştirmeden imleci geçerli satırın başına taşır (JDK sürümüne bağlıdır). Bundan sonra ne görüntülenirse mevcut dizenin üzerine yazılacaktır.

Örnek:

kod Konsol çıkışı
System.out.println("Greetings\r World!");
World!ngs

\fbir sayfa besleme karakteridir

Bu sembol, ilk nokta vuruşlu yazıcıların olduğu günlerden kalmadır. Bu dizinin çıktısını bir yazıcıya vermek, yazıcının yeni bir sayfa başlayana kadar herhangi bir metin yazdırmadan geçerli sayfayı beslemesine neden olur.

Şimdi buna sayfa sonu veya yeni sayfa diyeceğiz .

\\bir ters eğik çizgidir

Burada her şey açık. Metnimizde karakterlerden kaçmak için ters eğik çizgi kullanırsak, dizgede ters eğik çizgi karakterinin kendisini nasıl yazarız?

Çok basit: metne bir ters eğik çizgi ekleyin - arka arkaya iki tane yazmanız gerekir.

Örnek:

kod Konsol çıkışı
System.out.println("c:\projects\my\first");
Derleyici, kaçan bilinmeyen karakterler için size bağırır.
System.out.println("c:\\projects\\my\\first");
İşte böyle doğru yapılır!

"Çift eğik çizgi kullanmak mantıklı. Ama diğer her şeyi hemen ezberleyemedim. İpuçlarına güvenmem gerekecek."

"Yavaş yavaş neye ihtiyacın olduğunu hatırlayacaksın. Merak etme. Geri kalan her şey için Google var.

Unicode kodlama

"Ekranda görüntülenen her karakterin belirli bir sayısal koda karşılık geldiğini zaten biliyorsunuz. Bu kodların standartlaştırılmış bir grubuna kodlama denir .

"Bir zamanlar, bilgisayarlar yeni icat edildiğinde, her karakteri kodlamak için yedi bit (bir bayttan az) yeterliydi. İlk kodlama yalnızca 128 karakter içeriyordu. Bu kodlamaya ASCII adı verildi . "

"Bu garip bir isim."

"Bunda tuhaf bir şey yok. Bu bir kısaltma. ASCII, Bilgi Alışverişi için Amerikan Standart Kodu anlamına gelir - yazdırılabilir karakterler ve bazı özel kodlar için standart bir Amerikan kod tablosu."

"Yazdırılamayan 33 kontrol karakterinden (metin ve boşlukların nasıl işlendiğini etkiler) ve sayılar, büyük ve küçük Latin harfleri ve çeşitli noktalama işaretleri dahil olmak üzere 95 yazdırılabilir karakterden oluşur.

"Bilgisayarların popülaritesi arttıkça, her ülke kendi kodlamasını yayınlamaya başladı. Genellikle ASCII'yi başlangıç ​​noktası olarak aldılar ve nadiren kullanılan ASCII karakterlerini kendi alfabelerindeki sembollerle değiştirdiler.

"Zamanla bir fikir ortaya çıktı: dünyadaki her kodlamanın tüm karakterlerini içeren tek bir kodlama oluşturun.

Unicode kodlama

"Böylece, 1993 yılında Unicode kodlaması oluşturuldu ve Java dili, bu kodlamayı metin depolama standardı olarak kullanan ilk programlama dili oldu. Artık Unicode, tüm BT endüstrisi için standarttır.

"Unicode'un kendisi standart olmasına rağmen, birkaç temsili veya Unicode dönüştürme formatı (UTF) vardır: UTF-8, UTF-16 ve UTF-32, vb.

"Java, Unicode kodlamanın gelişmiş bir sürümünü kullanır - UTF-16: her karakter 16 bit (2 bayt) olarak kodlanmıştır. 65.536 karaktere kadar barındırabilir! Bu kodlamada dünyadaki her alfabenin hemen hemen her karakterini bulabilirsiniz. "

"Umarım ezbere bilmem gerekmez?"

"İstiyorsan git!"

"Tamam, peki. Şu kuralı kullanacağım: her şeyi bilemezsiniz ama her şeyi Google'da bulabilirsiniz."

"Rasyonel bir yaklaşım benimsemek her şeydir. Yani, kodunu kullanarak programınıza bir Unicode karakteri yazmak için \u+ kodu onaltılık olarak yazmanız gerekir . Örneğin,\u00A9

kod Konsol çıkışı
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode: kod noktası

"640 kilobayt herkes için yeterli olmalı! Ya da değil". Bill Gates bir keresinde bunu söylemişti. Ya da değil. En azından bu alıntı ona atfediliyor."

"Haha. 640 kilobayt bir temizlik robotunun beynini yüklemek için bile yeterli değil."

"Hayat zor ve zamanla UTF-16 kodlaması yetersiz kalmaya başladı. Pek çok Asya dili olduğu ve bunların çok fazla glifi olduğu ortaya çıktı. Ve tüm bu glifler 2 bayta sıkıştırılamaz. ."

"Peki ne yapıyoruz?"

" Daha fazla bayt kullanın ! Ancak char türü yalnızca 2 bayttır ve onu 4'e değiştirmek o kadar kolay değildir: tüm dünyada milyarlarca satır Java kodu yazılmıştır ve char türü aniden 4 bayt olursa bozulur. yani karakter tipini değiştiremiyoruz!

"Başka bir yaklaşım daha var. Önlerine ters eğik çizgi koyarak karakterlerden nasıl kaçtığımızı hatırlayın. Temel olarak, tek bir karakteri birden fazla karakter kullanarak kodladık. Java'nın yaratıcıları da aynı yaklaşımı kullanmaya karar verdi.

char"Görsel olarak tek bir karakter olarak görünen bazı karakterler, bir dizide iki s olarak kodlanır :

kod Konsol çıkışı
System.out.println("\uD83D\uDD0A");
🔊

"Artık Java programınız emojileri bile konsola gönderebilir 😎"

"Bunu kesinlikle biraz eğlenmek için kullanacağım!"