\n과 \r (Escape String)

2020. 12. 2. 22:52Programming Language/JAVA

Escape String : \를 앞에 붙여 php에 정의되어 있는 원래의 의미를 벗어나는(escape) 문자들

 

\\ : 백슬래시

\n: 개행문자 (LineFeed - 커서를 다음 줄로 이동)

\r: 개행 문자 (CarriageReturn - 커서를 현재 줄의 맨 앞으로 이동)

\t: 탭 문자

\': 작은 따옴표 (작은따옴표 안에서 작은따옴표를 쓰고싶을 때)

\": 큰 따옴표 (큰 따옴표 안에서 큰 따옴표를 쓰고싶을 때)

 

Line Feed, CarriageReturn은 TypeWriter. 바로 타자기에서 유래 된 단어이다.

 

http://penguinpetes.com/b2evo/index.php?title=argh_microsoft_notepad_crlf_argh

한 줄을 다 채워서 다음 줄에 작성하려면 종이를 올려주는데 그것이 LineFeed, 올려주고 다시 오른쪽 끝으로 보내주는 것이 바로 Carriage Return이다.

 

그래서 CRLF를 해 주어야 한줄 내림으로 인식한다.

 

 

갑자기 왜 얘길 하나면, 파일 입출력을 하다보면 '개행문자' 를 처리할 일들이 생기기 때문이다.

아래는 words.txt 라는 텍스트 파일에서 단어를 불러오는 것인데

 

apple

love

book

 

이런식으로 구성되어있다.


try {
	FileReader fin = new FileReader("words.txt"); 
	int c;
	StringBuffer sb = new StringBuffer(); 
	while((c = fin.read()) != -1) { 
		if (c == '\n') {
			v.add(sb.toString().trim());
			}
		else {
			sb.append((char)c);
			}
		}
			
		if (sb.length() != 0)
			v.add(sb.toString());
			
} catch (IOException e) { 
	e.printStackTrace();
	return;
	} 
        

여기서

if (c == '\n') {
	v.add(sb.toString().trim());
}

if문 안의 조건과 trim()을 살펴보아야 한다.

c == '\n' 은 LF의 처리를, trim은 CR을 처리한다.

 

'\n' 을 만나면 하나의 단어로 완성되게 코드를 짰는데,

이러면 '\r'가 문자열에 남게된다.

따라서 tirm()함수로 문자열 양 옆에 붙은 WhiteSpace를 제거해준다.

이렇게 하면 txt파일에서 온전히 단어만 추출할 수 있다.

 

JAVA 뿐만 아니라 모든 경우 다 적용되므로 꼼꼼히 살펴 보도록 하자

반응형