CodeGym/Java Blog/무작위의/자바 이스케이프 문자
John Squirrels
레벨 41
San Francisco

자바 이스케이프 문자

무작위의 그룹에 게시되었습니다
회원
안녕! 이전 수업에서 우리는 이미 Java의 String 클래스 로 표현되는 텍스트 문자열에 대해 알게 되었습니다 . 기억하시겠지만 문자열은 일련의 문자입니다. 이러한 문자는 문자, 숫자, 문장 부호 등이 될 수 있습니다. 문자열을 만들 때 가장 중요한 것은 전체 시퀀스를 따옴표로 묶어야 한다는 것입니다.
public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
그러나 자체적으로 따옴표를 포함해야 하는 문자열을 만들어야 하는 경우 어떻게 해야 합니까? 예를 들어, 여러분이 가장 좋아하는 책에 대해 세상에 알리고 싶다고 가정해 보겠습니다.
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
컴파일러가 뭔가 불만스러워하는 것 같습니다! 문제가 무엇이라고 생각하십니까? 그리고 따옴표와 무슨 관련이 있습니까? 사실 모든 것이 매우 간단합니다. 컴파일러는 따옴표를 매우 특정한 방식으로 해석합니다. 즉, 문자열이 따옴표로 묶일 것으로 예상합니다. 그리고 컴파일러는 "를 볼 때마다 따옴표 뒤에 두 번째 따옴표가 올 것으로 예상하고 그 사이의 내용은 컴파일러가 생성할 문자열의 텍스트라고 예상합니다. 우리의 경우 주변의 따옴표는 "Twilight"라는 단어는 다른 따옴표 안에 있습니다. 컴파일러가 이 텍스트 부분에 도달하면 예상되는 작업을 이해하지 못합니다. 따옴표는 문자열을 만들어야 함을 나타냅니다. 그러나 그것이 컴파일러가 하는 일입니다. 이미행위! 이유는 다음과 같습니다. 간단히 말해서 컴파일러는 예상되는 작업에 대해 혼란스러워합니다. "또 다른 따옴표? 이것은 일종의 실수입니까? 이미 문자열을 만들고 있습니다! 아니면 다른 문자열을 만들어야 합니까? Argh!...:/" 따옴표가 명령일 때 컴파일러에게 알려야 합니다( "문자열 만들기!") 그리고 단순히 문자일 때("인용 부호와 함께 "Twilight"라는 단어 표시!"). 이를 위해 Java는 문자 이스케이프를 사용합니다 . 이는 특수 기호 \ 를 사용하여 수행됩니다 . 이 기호는 일반적으로 "백슬래시"라고 합니다. Java에서는 "이스케이프"할 문자와 결합된 백슬래시를 제어 시퀀스 라고 합니다 . 예를 들어, \"화면에 따옴표를 표시하기 위한 제어 시퀀스입니다. 코드에서 이 구문을 만나면 컴파일러는 이것이 화면에 표시되어야 하는 인용 부호일 뿐임을 이해합니다. 책으로 코드를 변경해 봅시다.
public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
\를 사용하여 두 개의 "내부" 따옴표를 이스케이프 처리했습니다. main() 메서드를 실행해 봅시다 ... 콘솔 출력:
My favorite book is "Twilight" by Stephanie Meyer
훌륭한! 코드는 우리가 원하는 대로 정확하게 작동했습니다! 따옴표는 우리가 이스케이프해야 하는 유일한 문자가 아닙니다. 누군가에게 우리 작업에 대해 이야기하고 싶다고 가정해 보겠습니다.
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("My work files are in D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
또 다른 오류! 이유를 짐작할 수 있습니까? 다시 한 번, 컴파일러는 무엇을 해야 할지 이해하지 못합니다. 결국 컴파일러는 \를 제어 시퀀스 이외의 것으로 인식하지 않습니다 ! 백슬래시 뒤에는 특별한 방식으로 해석해야 하는 특정 문자(예: 인용 부호)가 올 것으로 예상합니다. 그러나 이 경우 \ 뒤에 일반 문자가 옵니다. 따라서 컴파일러는 다시 혼란스러워합니다. 어떻게 해야 합니까? 이전과 완전히 동일합니다. \ 에 다른 \ 를 추가하기만 하면 됩니다 !
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("My work files are in D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
우리가 얻는 것을 보자: 콘솔 출력:
My work files are in D:\Work Projects\java
감독자! 컴파일러는 \ 가 나머지와 함께 표시되어야 하는 일반 문자인지 즉시 결정합니다. Java에는 상당히 많은 제어 시퀀스가 ​​있습니다. 전체 목록은 다음과 같습니다.
  • \t - 탭.
  • \b - 백스페이스(텍스트에서 한 단계 뒤로 이동하거나 단일 문자 삭제).
  • \n - 새 줄.
  • \r - 캐리지 리턴. ()
  • \f - 양식 피드.
  • \' 작은따옴표.
  • \" 큰따옴표.
  • \\ 백슬래시.
따라서 컴파일러가 텍스트에서 \n을 만나면 콘솔에 표시할 기호나 문자가 아니라 "새 줄로 이동!"이라는 특수 명령임을 이해합니다. 예를 들어 시의 일부를 표시하려는 경우 유용할 수 있습니다.
public class Main {
   public static void main(String[] args) {
       String byron = new String ("She walks in beauty, like the night, \nOf cloudless climes and starry skies\nAnd all that's best of dark and bright\nMeet in her aspect and her eyes...");
       System.out.println(byron);
   }
}
우리가 얻는 것은 다음과 같습니다. 콘솔 출력:
She walks in beauty, like the night,
Of cloudless climes and starry skies
And all that's best of dark and bright
Meet in her aspect and her eyes...
우리가 원했던 것! 컴파일러는 이스케이프 시퀀스를 인식하고 시의 발췌문을 4줄로 출력했습니다.

유니코드 문자 이스케이프

이스케이프 문자와 관련하여 알아야 할 또 다른 중요한 항목은 유니코드입니다. 유니코드는 전 세계 거의 모든 언어의 기호를 포함하는 표준 문자 인코딩입니다. 즉, 모든 언어의 거의 모든 문자를 나타내는 특수 코드 목록입니다! 당연히 이것은 매우 긴 목록이며 아무도 그것을 마음으로 배우지 않습니다 :) 그것이 어디에서 왔고 왜 그것이 필요하게 되었는지 알고 싶다면 이 유익한 기사를 읽으십시오: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html 모든 유니코드 문자 코드의 형식은 " u+<16진수>". 예를 들어, 잘 알려진 저작권 기호는 u00A9로 표시됩니다. 따라서 Java에서 텍스트로 작업할 때 이 문자를 사용해야 하는 경우 텍스트에서 이 문자를 이스케이프할 수 있습니다! 예를 들어, 우리는 원하는 CodeGym이 이 레슨에 대한 저작권을 소유하고 있음을 모든 사람에게 알리기 위해:
public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
콘솔 출력:
"Escaping characters", © 2019 CodeGym
좋아, 다 잘 됐어! 그러나 그것은 특별한 기호에 관한 것이 아닙니다! 유니코드 및 이스케이프 문자를 사용하여 다른 언어로 동시에 작성된 텍스트를 인코딩할 수 있습니다. 심지어 같은 언어의 여러 다른 방언으로 쓰여진 텍스트도 있습니다!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u004d\u0061\u006f \u005a\u0065\u0064\u006f\u006e\u0067 " +

               "\u0028\u0054\u0072\u0061\u0064\u0069\u0074\u0069\u006f\u006e\u0061\u006c " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6fa4\u6771\u002c " +

               "\u0053\u0069\u006d\u0070\u006c\u0069\u0066\u0069\u0065\u0064 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6cfd\u4e1c\u002c " +

               "\u0050\u0069\u006e\u0079\u0069\u006e\u003a \u004d\u00e1\u006f " +

               "\u005a\u00e9\u0064\u014d\u006e\u0067\u0029 \u0077\u0061\u0073 \u0061 " +

               "\u0032\u0030\u0074\u0068\u002d\u0063\u0065\u006e\u0074\u0075\u0072\u0079 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065 " +

                "\u0073\u0074\u0061\u0074\u0065\u0073\u006d\u0061\u006e\u002c " +

               "\u0070\u006f\u006c\u0069\u0074\u0069\u0063\u0069\u0061\u006e\u002c " +

               "\u0061\u006e\u0064 \u0074\u0068\u0065 \u0063\u0068\u0069\u0065\u0066 " +

               "\u0074\u0068\u0065\u006f\u0072\u0065\u0074\u0069\u0063\u0069\u0061\u006e " +

               "\u006f\u0066 \u004d\u0061\u006f\u0069\u0073\u006d\u002e");
   }
}
콘솔 출력:
Mao Zedong (Traditional Chinese: 毛澤東, Simplified Chinese: 毛泽东, Pinyin: Máo Zédōng) was a 20th-century Chinese statesman, politician, and the chief theoretician of Maoism.
이 예에서는 문자 코드를 사용하여 영어와 번체, 간체 및 라틴어(병음)의 세 가지(!) 한자 유형으로 구성된 문자열을 작성했습니다. 그리고 그것에 대해 요약합니다! 이제 작업에서 이 훌륭한 도구를 사용하기 위해 이스케이프 문자에 대해 충분히 알게 되었습니다 :) 배운 내용을 강화하려면 Java 과정에서 비디오 강의를 시청하는 것이 좋습니다.

더 읽어보기:

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다