1. 탈주하는 이유

옛날 옛적에 코드에 문자열을 작성하려면 큰따옴표로 묶어야 한다는 것을 배웠습니다. 결과는 문자열 리터럴 입니다 .

그러나 문자열 리터럴 내에 따옴표가 필요한 경우 어떻게 해야 합니까? 따옴표가 포함된 문자열 — 무엇이 더 쉬울 수 있습니까?

텍스트를 표시하고 싶다고 가정해 보겠습니다 "Friends" was nominated for an "Oscar". 어떻게 합니까?

암호 노트
String s = ""Friends" was nominated for an "Oscar"";
이 옵션은 작동하지 않습니다!

문제는 컴파일러가 완전히 예상치 못한 코드를 작성하고 있다고 생각한다는 것입니다.

암호 노트
String s = ""Friends" was nominated for an "Oscar"";
이 옵션은 작동하지 않습니다!

컴파일러는 코드에서 큰따옴표를 발견한 후 뒤따르는 것을 문자열 리터럴의 시작으로 처리합니다. 다음 큰따옴표는 문자열 리터럴의 끝을 나타냅니다.

그렇다면 리터럴 안에 큰따옴표는 어떻게 쓰나요?


2. 탈출 캐릭터

방법이 있습니다. 이를 이스케이프 문자 라고 합니다 . 텍스트 문자열 내에 인용 부호를 작성하기만 하면 됩니다. 그리고 따옴표 앞에 \( 백슬래시 ) 기호를 추가합니다.

다음은 문자열 리터럴이 제대로 작성되었을 때의 모습입니다.

암호 노트
String s = "\"Friends\" was nominated for an \"Oscar\"";
작동합니다!

컴파일러는 모든 것을 올바르게 해석하고 백슬래시 뒤의 따옴표를 일반 따옴표로 간주하지 않습니다.

또한 이 문자열을 화면에 출력하면 백슬래시 가 있는 따옴표가 올바르게 처리되고 텍스트가 백슬래시 없이 표시됩니다."Friends" was nominated for an "Oscar"

또 다른 중요한 점. 백슬래시 앞에 오는 따옴표는 단일 문자를 나타냅니다. 우리는 코드에서 문자열 리터럴을 인식하는 컴파일러의 기능을 방해하지 않는 매끄러운 표기법을 사용하고 있습니다. 변수 에 따옴표를 할당할 수 있습니다 char.

암호 노트
char c = '\"';
\"두 글자가 아닌 한 글자
char c = '"';
이것도 가능합니다: 작은 따옴표 안에 큰따옴표

3. 문자를 이스케이프할 때 자주 발생하는 상황

이스케이프 문자와 관련된 일반적인 상황

큰따옴표 외에도 컴파일러에서 특별한 방식으로 처리하는 다른 많은 문자가 있습니다. 예를 들어, 줄 바꿈.

리터럴에 줄 바꿈을 어떻게 추가합니까? 이를 위한 특수 조합도 있습니다.

\n
줄 바꿈 문자

문자열 리터럴에 줄 바꿈을 추가해야 하는 경우 몇 가지 문자만 추가하면 됩니다 \n.

예:

암호 콘솔 출력
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

이와 같이 총 8개의 특수 조합이 있으며 이를 이스케이프 시퀀스 라고도 합니다 . 여기 있습니다:

암호 설명
\t 문자 삽입
\b 백스페이스 문자 삽입
\n 개행 문자 삽입
\r 캐리지 리턴 문자 삽입
\f 페이지 피드 문자 삽입
\' 작은따옴표 삽입
\" 큰따옴표 삽입
\\ 백슬래시 삽입

당신은 그들 중 두 개에 대해 잘 알고 있지만 나머지 6개는 무엇을 의미합니까?

\t탭 문자입니다

이 텍스트가 텍스트에 나타나면 입력하는 동안 키를 누르는 것과 같습니다 Tab. 뒤에 오는 텍스트를 이동하고 텍스트를 정렬할 수 있습니다.

예:

암호 콘솔 출력
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한 문자 뒤로 이동'을 의미합니다.

Backspace문자열의 이 시퀀스는 키보드의 키를 누르는 것과 같습니다 . 앞에 오는 문자를 제거합니다.

암호 콘솔 출력
System.out.println("Hello\b\b World");
Hell World!

\r캐리지 리턴 문자입니다.

이 문자는 텍스트를 변경하지 않고 현재 줄의 시작 부분으로 커서를 이동합니다. 다음에 표시되는 내용은 기존 문자열을 덮어씁니다.

예:

암호 콘솔 출력
System.out.println("Greetings\r World!");
World!

\f페이지 피드 문자입니다.

이 기호는 최초의 도트 매트릭스 프린터 시대부터 우리에게 전해집니다. 이 시퀀스를 프린터로 출력하면 프린터는 새 페이지가 시작될 때까지 텍스트를 인쇄하지 않고 현재 시트를 공급합니다.

이제 페이지 나누기 또는 새 페이지 라고 합니다 .

\\백 슬래시입니다

여기에서는 모든 것이 간단합니다. 텍스트의 문자를 이스케이프하기 위해 백슬래시를 사용하는 경우 문자열에 백슬래시 문자 자체를 어떻게 작성합니까?

간단합니다. 텍스트에 백슬래시를 추가하세요 . 두 개를 연속으로 작성해야 합니다.

예:

암호 콘솔 출력
System.out.println("c:\projects\my\first");
컴파일러는 알 수 없는 이스케이프 문자에 대해 소리칠 것입니다.
System.out.println("c:\\projects\\my\\first");
그래야 제대로 된거야!


4. 유니코드 인코딩

이미 알고 있듯이 화면에 표시되는 각 문자는 특정 숫자 코드에 해당합니다. 이러한 코드의 표준화된 집합을 인코딩 이라고 합니다 .

옛날 옛적에 컴퓨터가 새로 발명되었을 때 모든 문자를 인코딩하는 데 7비트(1바이트 미만)면 충분했습니다. 첫 번째 인코딩에는 128자만 포함되었습니다. 이 인코딩을 ASCII 라고 합니다 .

ASCII는 정보 교환을 위한 미국 표준 코드(American Standard Code for Information Interchange)의 약자로 인쇄 가능한 문자 및 일부 특수 코드에 대한 표준 미국 코드 테이블입니다.

인쇄할 수 없는 33개의 제어 문자(텍스트와 공백 처리 방법에 영향을 미침)와 숫자, 대문자 및 소문자 라틴 문자, 여러 문장 부호를 포함하여 인쇄할 수 있는 95개의 문자로 구성됩니다.

유니코드 인코딩

컴퓨터의 인기가 높아짐에 따라 각 국가에서 고유한 인코딩을 출시하기 시작했습니다. 일반적으로 그들은 시작점으로 ASCII를 사용하고 거의 사용되지 않는 ASCII 문자를 해당 알파벳의 기호로 대체했습니다.

시간이 지남에 따라 아이디어가 떠 올랐습니다. 전 세계 모든 인코딩의 모든 문자를 포함하는 단일 인코딩을 만드는 것입니다.

유니코드 인코딩 1

따라서 1993년에 유니코드 인코딩이 만들어졌고 자바 언어는 이 인코딩을 텍스트 저장의 표준으로 사용한 최초의 프로그래밍 언어가 되었습니다. 이제 유니코드는 전체 IT 산업의 표준입니다.

유니코드 자체가 표준이지만 UTF-8, UTF-16 및 UTF-32 등의 여러 표현 또는 유니코드 변환 형식(UTF)이 있습니다.

Java는 유니코드 인코딩의 고급 버전인 UTF-16을 사용합니다. 각 문자는 16비트(2바이트)로 인코딩됩니다. 최대 65,536자를 수용할 수 있습니다!

이 인코딩에서 전 세계 모든 알파벳의 거의 모든 문자를 찾을 수 있습니다. 당연히 아무도 모든 것을 암기하지 않습니다. 모든 것을 알 수는 없지만 모든 것을 Google에서 검색할 수 있습니다.

코드를 사용하여 프로그램에서 유니코드 문자를 작성하려면 코드를 16진수로\u 작성 해야 합니다 . 예를 들어,\u00A9

암호 콘솔 출력
System.out.println("\u00A9 CodeGym");
© CodeGym


5. 유니코드: 코드 포인트

"640킬로바이트는 모든 사람에게 충분해야 합니다! 아니면". (빌 게이츠의 인용문)

삶은 거칠고 시간이 지남에 따라 UTF-16 인코딩이 부적절해지기 시작했습니다. 알고 보니 아시아 언어가 많고 글리프도 많습니다. 그리고 이 모든 글리프는 단순히 2바이트로 채워질 수 없습니다.

무엇을 할 수 있습니까? 더 많은 바이트를 사용하십시오 !

그러나 char 유형은 2바이트에 불과하며 이를 4바이트로 변경하는 것은 그리 쉬운 일이 아닙니다. 전 세계적으로 수십억 줄의 Java 코드가 작성되었으며, char 유형이 갑자기 Java 시스템에서 4바이트가 되면 중단될 것입니다. 따라서 char 유형을 변경할 수 없습니다!

또 다른 접근법이 있습니다. 문자 앞에 백슬래시를 넣어 문자를 이스케이프 처리하는 방법을 기억하십시오. 기본적으로 단일 문자를 여러 문자를 사용하여 인코딩했습니다.

Java 제작자는 동일한 접근 방식을 사용하기로 결정했습니다.

시각적으로 단일 문자로 나타나는 일부 문자는 char문자열에서 두 개의 s로 인코딩됩니다.

암호 콘솔 출력
System.out.println("\uD83D\uDD0A");
🔊

이제 Java 프로그램에서 이모티콘을 콘솔에 출력할 수도 있습니다 😎