입력 : 없음.
출력 : 고양이를 출력한다.
예제 입력 : 없음.
예제 출력
\ /\
) ( ')
( / )
\(__)|
제출한 코드
public class Main{
public static void main(String[] arg){
System.out.println("\\ /\\"
+"\n ) ( ')"
+"\n( / )"
+"\n \\(__)|");
}
}
풀이
JAVA에서는 백 슬래시(\) 문자는 이스케이프 문자로써 그 자체를 문자로 사용하기에는 제약이 있습니다
이스케이프 문자란?
컴퓨터와 주변 기기의 상태를 바꾸는 데에 쓰이는 일련의 문자열인 스케이프 시퀀스를 따르는 문자들로서 다음 문자가 특수 문자임을 알리는 백 슬래시(\)를 사용해줘야 한다
위 설명처럼 백슬래시는 이스케이프 문자로써 백 슬래시 자체를 문자로 사용할 경우 특수 문자임을 알리는 백 슬래시를 한번 더 붙여주면 된다 단! 정규식에서는 백 슬래시 한 개를 표현하기 위해 3개의 백 슬래시를 추가로 붙여줘야 한다
예제)
replace와 replaceAll 메서드를 사용한 문자 치환 코드
String escapeText = "coffee \\ tea";
System.out.println( escapeText.replace("\\", "or") );
system.out.println( escapeText.replaceAll("\\", "or") );
정규식을 테스트 하기 위해 위처럼 작성하고 컴파일하면 에러가 발생합니다
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
at java.utill.regex.Pattern.error(Unknown Source)
at java.utill.regex.Pattern.compile(Unknown Source)
at java.utill.regex.Pattern.<init>(Unknown Source)
at java.utill.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at tistory.Example.main(Example.java:9)
이유는 replace는 문자열을 파라미터로 받지만, replaceAll은 정규식을 파라미터로 받는다 따라서 replaceAll("\\", "or")이 부분을 replaceAll("\\\\", "or")로 변경하면 정상적으로 출력된다
coffee or tea
coffee or tea