Codegym University 과정의 일부로 멘토와 함께하는 강의 스니펫. 전체 과정에 등록하십시오.


"안녕하세요, Amigo. 옛날 옛적에 코드에 문자열을 작성하려면 큰따옴표로 묶어야 한다는 것을 배웠습니다."

"예, 그리고 그것은 우리에게 문자열 리터럴을 제공합니다 . 제가 이것에 대해 알게 된 것은 그리 오래되지 않았습니다."

"우리 직업에서는 오래 전 일입니다. 하지만 지금은 그게 요점이 아닙니다. 대신 문자열 리터럴 내부에 따옴표가 필요한 경우 어떻게 해야 하는지 알려주세요."

"음... 따옴표가 포함된 문자열 - 더 쉬울 수 있는 방법이 있습니다. 분명 방법이 있을 겁니다..."

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

"솔직히 말해서 잘 모르겠어. 아무것도 생각나지 않아."

"논리만으로는 해결책에 도달할 수 없습니다. 어떻게 해야 하는지 보여드리겠습니다.

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

"컴파일러가 완전히 다른 코드로 해석하기 때문에 이 옵션은 작동하지 않습니다.

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

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

"그럼 리터럴 안에 큰따옴표는 어떻게 쓰나요?"

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

"올바르게 작성된 문자열 리터럴은 다음과 같습니다.

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

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

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

"음, 이게 엄청 편하다는 말은 안 할게요..."

"하지만 무엇을 할 수 있습니까? 규칙입니다. 또 다른 중요한 점입니다. 백슬래시 앞에 오는 따옴표는 단일 문자를 나타냅니다. 코드에 따옴표를 할당할 수 있습니다 char.

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

문자를 이스케이프할 때 발생하는 일반적인 상황

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

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

\n
줄 바꿈 문자

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

예:

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

" 이스케이프 시퀀스 라고도 하는 이와 같은 총 8개의 특수 조합이 있습니다 . 다음은 다음과 같습니다.

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

"이미 2개를 보여줬잖아. 나머지 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");
Hel World

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

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

예:

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

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

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

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

\\백 슬래시입니다

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

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

예:

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

"이중 슬래시를 사용하는 것이 말이 됩니다. 하지만 다른 모든 것을 즉시 외울 수 없었습니다. 당신의 힌트에 의존해야 합니다."

"점차 필요한 것을 기억하게 될 것입니다. 걱정하지 마세요. 그 외 모든 것은 Google이 있습니다.

유니코드 인코딩

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

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

"이상한 이름이네요."

"이상한 것은 없습니다. 약어입니다. ASCII는 American Standard Code for Information Interchange의 약자입니다. 인쇄 가능한 문자와 일부 특수 코드에 대한 표준 미국 코드 테이블입니다."

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

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

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

유니코드 인코딩

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

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

"자바는 유니코드 인코딩의 고급 버전인 UTF-16을 사용합니다. 각 문자는 16비트(2바이트)로 인코딩됩니다. 최대 65,536자를 수용할 수 있습니다! 이 인코딩에서 전 세계 모든 알파벳의 거의 모든 문자를 찾을 수 있습니다. "

"나는 그것을 마음으로 알 필요가 없기를 바랍니다."

"하고 싶으면 가!"

"좋아요. 이 규칙을 사용하겠습니다. 모든 것을 알 수는 없지만 모든 것을 Google에 검색할 수 있습니다."

"합리적인 접근 방식을 채택하는 것이 전부입니다. 따라서 코드를 사용하여 프로그램에 유니코드 문자를 작성하려면 코드를\u + 16진수로 작성해야 합니다 . 예를 들어,\u00A9

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

유니코드: 코드 포인트

"640킬로바이트는 모든 사람에게 충분해야 합니다! 아니면". 빌 게이츠가 이런 말을 한 적이 있습니다. 아니면. 적어도 이 인용문은 그에게 귀속됩니다."

"하하. 640킬로바이트는 청소로봇의 뇌를 채우기에도 부족해."

"인생은 거칠고 시간이 지남에 따라 UTF-16 인코딩이 부적절해지기 시작했습니다. 아시아 언어가 많고 글리프가 많다는 것이 밝혀졌습니다. 그리고 이러한 모든 글리프는 단순히 2바이트로 압축될 수 없습니다. ."

"그럼 어떡하지?"

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

"또 다른 접근 방식이 있습니다. 문자 앞에 백슬래시를 넣어 문자를 이스케이프 처리하는 방법을 기억하세요. 기본적으로 우리는 여러 문자를 사용하여 단일 문자를 인코딩했습니다. Java 제작자는 동일한 접근 방식을 사용하기로 결정했습니다.

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

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

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

"재미있게 사용하겠습니다!"