Een fragment uit een lezing met een mentor als onderdeel van de Codegym University-cursus. Schrijf je in voor de volledige cursus.


"Gegroet, Amigo. Er was eens dat je leerde dat je, om een ​​reeks karakters in code te schrijven, ze tussen dubbele aanhalingstekens moet plaatsen."

'Ja, en dat geeft ons een letterlijke tekenreeks . Het is nog niet zo lang geleden dat ik hier achter kwam.'

"In ons beroep was dat lang geleden. Maar daar gaat het nu niet om. Vertel me in plaats daarvan wat ik moet doen als we aanhalingstekens nodig hebben in een letterlijke tekenreeks?"

"Hmm... Een string met aanhalingstekens — wat is er eenvoudiger. Ik weet zeker dat er een manier is..."

"Ja. Laten we zeggen dat we de tekst willen weergeven "Friends" was nominated for an "Oscar". Hoe zouden we dat doen?"

"Eerlijk gezegd heb ik geen idee. Ik kan niets bedenken."

"Je zult niet in staat zijn om door middel van logica tot een oplossing te komen. Laat me je gewoon laten zien wat je moet doen.

Code Notities
String s = ""Friends" was nominated for an "Oscar"";
Deze optie werkt niet!"

"Deze optie zal niet werken, omdat de compiler dit interpreteert als geheel andere code:

Code Notities
String s = ""Friends" was nominated for an "Oscar"";
Deze optie werkt niet!"

"Nadat de compiler dubbele aanhalingstekens in de code tegenkomt, behandelt het wat volgt als het begin van een letterlijke tekenreeks. Het volgende dubbele aanhalingsteken geeft het einde van de letterlijke tekenreeks aan."

"Dus hoe schrijf je dubbele aanhalingstekens in een letterlijke zin?"

"Er is een manier. Het wordt escape-tekens genoemd . Je schrijft gewoon de aanhalingstekens binnen de tekstreeks. En voor de aanhalingstekens voeg je het \ ( backslash ) symbool toe.

"Zo ziet de letterlijke tekenreeks eruit als deze correct is geschreven:

Code Notities
String s = "\"Friends\" was nominated for an \"Oscar\"";
Dit zal werken!

"De compiler zal alles correct interpreteren en zal het aanhalingsteken na de backslash niet beschouwen als een normaal aanhalingsteken.

"Bovendien, als u deze string naar het scherm uitvoert, worden de aanhalingstekens met backslashes correct verwerkt en wordt de tekst zonder backslashes weergegeven:"Friends" was nominated for an "Oscar"

"Nou, ik ga niet zeggen dat dit superhandig is..."

"Maar wat kun je doen, dat zijn de regels. Nog een belangrijk punt. Een aanhalingsteken voorafgegaan door een backslash vertegenwoordigt een enkel teken: we gebruiken gewoon een gelikte notatie die het vermogen van de compiler om letterlijke tekenreeksen in onze code U kunt aanhalingstekens toekennen aan een charvariabele:

Code Notities
char c = '\"';
\"is één teken, niet twee
char c = '"';
Dit kan ook: een dubbel aanhalingsteken binnen enkele aanhalingstekens

Veelvoorkomende situaties die zich voordoen bij het ontsnappen aan tekens

"Naast dubbele aanhalingstekens zijn er nog veel meer karakters die de compiler op een speciale manier verwerkt. Bijvoorbeeld een regeleinde.

"Hoe voegen we een regeleinde toe aan een literaal? Ook hiervoor is een speciale combinatie:

\n
Regeleinde karakter

"Als u een regeleinde aan een letterlijke tekenreeks moet toevoegen, voegt u gewoon een paar tekens toe" \n.

Voorbeeld:

Code Console-uitvoer
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

"Er zijn in totaal 8 speciale combinaties zoals deze, die ook ontsnappingsreeksen worden genoemd . Hier zijn ze:

Code Beschrijving
\t Voeg een tabteken in
\b Voeg een backspace- teken in
\n Voeg een teken voor een nieuwe regel in
\r Voeg een regelterugloopteken in
\f Voeg een paginafeed- teken in
\' Voeg een enkel aanhalingsteken in
\" Voeg een dubbel aanhalingsteken in
\\ Voeg een backslash in

"Je hebt me er al twee laten zien. Wat betekenen die andere zes?"

"Ik zal het nu allemaal uitleggen.

\tis een tabteken

Wanneer deze tekst in tekst verschijnt, is dit gelijk aan het indrukken van de Tabtoets tijdens het typen. Het verschuift de tekst die erop volgt en maakt het mogelijk om tekst uit te lijnen.

Voorbeeld:

Code Console-uitvoer
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

\bbetekent 'één teken teruggaan'

Deze reeks in een string komt overeen met het indrukken van de Backspacetoets op het toetsenbord. Het verwijdert het karakter dat eraan voorafgaat:

Code Console-uitvoer
System.out.println("Hello\b\b World");
Hel World

\ris het regelterugloopteken

Dit teken verplaatst de cursor naar het begin van de huidige regel zonder de tekst te wijzigen (afhankelijk van de JDK-versie). Wat hierna wordt weergegeven, zal de bestaande tekenreeks overschrijven.

Voorbeeld:

Code Console-uitvoer
System.out.println("Greetings\r World!");
World!ngs

\fis een paginafeed-teken

Dit symbool stamt uit de tijd van de eerste matrixprinters. Het uitvoeren van deze reeks naar een printer zou ervoor zorgen dat de printer gewoon het huidige vel invoert, zonder enige tekst af te drukken, totdat een nieuwe pagina begint.

Nu zouden we het een pagina-einde of nieuwe pagina noemen .

\\is een backslash

Alles is hier eenvoudig. Als we een backslash gebruiken om tekens in onze tekst te escapen, hoe schrijven we dan zelf een backslash-teken in de string?

Het is simpel: voeg een backslash toe aan de tekst — je moet er twee achter elkaar schrijven.

Voorbeeld:

Code Console-uitvoer
System.out.println("c:\projects\my\first");
De compiler zal tegen je schreeuwen voor onbekende ontsnapte karakters.
System.out.println("c:\\projects\\my\\first");
Zo is het goed gedaan!

'Het gebruik van dubbele schuine strepen is logisch. Maar al het andere heb ik niet meteen uit mijn hoofd kunnen leren. Ik zal op uw hints moeten vertrouwen.'

"Gaandeweg onthoud je wat je nodig hebt. Maak je geen zorgen. En voor al het andere is er Google.

Unicode-codering

"Je weet al dat elk teken dat op het scherm wordt weergegeven, overeenkomt met een specifieke numerieke code. Een gestandaardiseerde set van deze codes wordt een codering genoemd .

"Er was eens, toen computers nieuw werden uitgevonden, zeven bits (minder dan één byte) genoeg om elk teken te coderen. De eerste codering bevatte slechts 128 tekens. Deze codering werd ASCII genoemd . "

"Dat is een vreemde naam."

"Er is niets vreemds aan. Het is een afkorting. ASCII staat voor American Standard Code for Information Interchange - een standaard Amerikaanse codetabel voor afdrukbare tekens en enkele speciale codes."

"Het bestaat uit 33 niet-afdrukbare controletekens (die van invloed zijn op hoe tekst en spaties worden verwerkt) en 95 afdrukbare tekens, waaronder cijfers, Latijnse hoofdletters en kleine letters, en verschillende leestekens.

"Naarmate computers steeds populairder werden, begon elk land zijn eigen codering vrij te geven. Gewoonlijk namen ze ASCII als uitgangspunt en vervingen ze zelden gebruikte ASCII-tekens door symbolen uit hun respectievelijke alfabetten.

"Na verloop van tijd ontstond er een idee: maak een enkele codering die alle karakters van elke codering ter wereld bevat.

Unicode-codering

"Zo werd in 1993 de Unicode- codering gecreëerd en werd de Java-taal de eerste programmeertaal die deze codering gebruikte als de standaard voor het opslaan van tekst. Nu is Unicode de standaard voor de hele IT-industrie.

"Hoewel Unicode zelf de standaard is, heeft het verschillende weergaven of Unicode-transformatieformaten (UTF): UTF-8, UTF-16 en UTF-32, enz.

"Java gebruikt een geavanceerde versie van Unicode-codering - UTF-16: elk teken is gecodeerd in 16 bits (2 bytes). Het biedt plaats aan maximaal 65.536 tekens! Je kunt bijna elk teken van elk alfabet ter wereld in deze codering vinden. "

'Ik hoop dat ik het niet uit mijn hoofd hoef te weten?'

"Als je wilt, ga ervoor!"

"Oké, prima. Ik zal deze regel gebruiken: je kunt niet alles weten, maar je kunt alles googelen."

\u"Een rationele benadering aannemen is alles. Dus om een ​​Unicode-teken in uw programma te schrijven met behulp van de code, moet u + de code in hexadecimaal schrijven . Bijvoorbeeld,\u00A9

Code Console-uitvoer
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode: codepunt

"640 kilobytes zou genoeg moeten zijn voor iedereen! Of niet". Bill Gates zei dat ooit. Of niet. Dit citaat wordt in ieder geval aan hem toegeschreven."

"Haha. 640 kilobyte is niet eens genoeg om het brein van een schoonmaakrobot te belasten."

"Het leven is ruw en na verloop van tijd begon de UTF-16-codering ontoereikend te worden. Het blijkt dat er veel Aziatische talen zijn en dat ze veel glyphs hebben. En al deze glyphs kunnen eenvoudigweg niet in 2 bytes worden gepropt ."

"Dus wat doen we?"

"Gebruik meer bytes ! Maar het char-type is slechts 2 bytes en het veranderen in 4 is niet zo eenvoudig: miljarden regels Java-code zijn over de hele wereld geschreven, wat zou breken als het char-type plotseling 4 bytes wordt in een Java machine. We kunnen het tekentype dus niet wijzigen!

"Er is een andere benadering. Onthoud hoe we karakters ontlopen door er een backslash voor te plaatsen. In feite hebben we een enkel karakter gecodeerd met meerdere karakters. De makers van Java besloten om dezelfde benadering te gebruiken.

"Sommige karakters die visueel verschijnen als een enkel karakter zijn gecodeerd als twee chars in een string:

Code Console-uitvoer
System.out.println("\uD83D\uDD0A");
🔊

"Nu kan je Java-programma zelfs emoji's uitvoeren naar de console 😎"

"Die ga ik zeker gebruiken om plezier te hebben!"