1. Karakterlerden kaçma nedenleri

Bir zamanlar, kodda bir karakter dizisi yazmak için onları çift tırnak içine almanız gerektiğini öğrendiniz. Sonuç, bir dize sabit değeridir .

Ancak, bir dize hazır bilgisi içinde tırnak işaretlerine ihtiyacımız olursa ne yaparız? Tırnak içeren bir dize — daha kolay ne olabilir?

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

kod notlar
String s = ""Friends" was nominated for an "Oscar"";
Bu seçenek çalışmayacak!

Sorun şu ki, derleyici tamamen beklenmedik bir kod yazdığınızı düşünüyor:

kod notlar
String s = ""Friends" was nominated for an "Oscar"";
Bu seçenek çalışmayacak!

Derleyici, kodda çift tırnakla karşılaştıktan sonra, aşağıdakileri bir dizgi hazır bilgisinin başlangıcı olarak ele alır. Bir sonraki çift tırnak işareti, dize hazır bilgisinin sonunu gösterir.

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


2. Kaçan karakterler

Bir yol var. Kaçan karakterler denir . Metin dizesinin içindeki tırnak işaretlerini yazmanız yeterlidir. Ve tırnaklardan önce \( ters eğik çizgi ) sembolünü eklersiniz.

Bu, düzgün yazıldığında dize hazır bilgisinin nasıl göründüğüdü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 bu stringi ekrana yazdırırsanız ters eğik çizgili tırnaklar doğru işlenecek ve metin ters eğik çizgi olmadan görüntülenecektir:"Friends" was nominated for an "Oscar"

Bir başka önemli nokta. Başında ters eğik çizgi bulunan bir tırnak işareti, tek bir karakteri temsil eder: biz yalnızca, derleyicinin kodumuzdaki dize değişmezlerini tanıma becerisine müdahale etmeyen düzgün 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

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

Kaçan karakterleri içeren yaygın durumlar

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

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

\n
Satır sonu karakteri

Bir dize sabit değerine bir satır sonu eklemeniz gerekirse, yalnızca birkaç karakter eklemeniz gerekir: \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 vardır . İşte buradalar:

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

Bunlardan ikisini biliyorsunuz, peki diğer 6'sı ne anlama geliyor?

\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");
Hell World!

\rsatır başı karakteridir

Bu karakter, metni değiştirmeden imleci geçerli satırın başına taşı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!

\fbir sayfa besleme karakteridir

Bu sembol bize ilk nokta vuruşlu yazıcıların olduğu günlerden geliyor. 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!


4. Unicode kodlama

Bildiğiniz gibi, ekranda görüntülenen her karakter belirli bir sayısal koda karşılık gelir. Bu kodların standartlaştırılmış bir kümesine 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 .

ASCII, American Standard Code for Information Interchange anlamına gelir - yazdırılabilir karakterler ve bazı özel kodlar için standart bir Amerikan kod tablosu.

33 yazdırılamayan 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.

Unicode kodlama

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 ilgili alfabelerinden 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 1

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. Doğal olarak, kimse her şeyi ezberlemiyor. Her şeyi bilemezsiniz, ancak her şeyi Google'da arayabilirsiniz.

Programınıza kodunu kullanarak bir Unicode karakteri yazmak için, kodu\u + onaltılık olarak yazmanız gerekir . Örneğin,\u00A9

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


5. Unicode: kod noktası

"640 kilobayt herkes için yeterli olmalı! Ya da değil". (Bill Gates'e atfedilen alıntı)

Hayat zor ve zamanla UTF-16 kodlaması yetersiz kalmaya başladı. Görünüşe göre pek çok Asya dili var ve bunlarda çok fazla glif var. Ve tüm bu glifler, 2 bayta sıkıştırılamaz.

Ne yapılabilir? 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 bu, char türü aniden bir Java makinesinde 4 bayt olursa bozulur. Yani karakter tipini değiştiremiyoruz!

Başka bir yaklaşım var. Önlerine ters eğik çizgi koyarak karakterlerden nasıl kaçtığımızı hatırlayın. Temel olarak, birden fazla karakter kullanarak tek bir karakteri kodladık.

Java'nın yaratıcıları da aynı yaklaşımı kullanmaya karar verdiler.

charGö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 😎