printf에서 Java의 "% n"은 어떻게됩니까?


107

나는 Effective Java를 읽고 있으며 %n모든 곳에서 개행 문자를 사용 합니다. \nJava 프로그램에서 개행 문자를 성공적으로 사용 했습니다.

어느 것이 '올바른'것입니까? 뭐가 문제 야 \n? Java가이 C 규칙을 변경 한 이유는 무엇입니까?


1
추측이지만 : 크로스 플랫폼 지원. 다른 시스템은 줄 바꿈에 다른 문자를 사용합니다 (예 : \ n 대 \ r \ n). C #에는 동일한 목적을 위해 Environment.NewLine이 있습니다.
Jordan 달리기

Java는 System에도 무언가가 있지만 printf에서는 % n이 더 쉽습니다.
Paul Tomblin

이 C 규칙 == 1, :) 변경 자바 왜 그랬는지
마이클 Dimmitt

변경이 아니라 추가 / 향상입니다. \ n 여전히 의미 \ n
Bill K

(향후 독자 참고 사항 : C는 이미 \n텍스트 형식의 플랫폼 특정 줄 바꿈으로 자동 변환 합니다. 여기를 참조 하십시오 . Java는 그렇지 않습니다.)
user202729

답변:


150

빠른 Google에서 :

인수에 해당하지 않는 지정자도 하나 있습니다. 줄 바꿈을 출력하는 것은 "% n"입니다. 경우에 따라 "\ n"도 사용할 수 있지만 "% n"은 항상 올바른 플랫폼 별 줄 구분 기호를 출력하므로 플랫폼간에 이식 할 수 있지만 "\ n"은 그렇지 않습니다.

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html을 참조 하십시오.

원본 소스


@ user2864740 맞습니다. 올바른 플랫폼 별 줄 구분 기호를 출력하지 않고 현재 줄 구분 기호를 출력합니다 .
Hauke ​​Ingmar Schmidt

음, 그게 무슨 뜻입니까?
Kalpesh Soni

나는 그것이 실행중인 현재 OS에 대해 하나를 사용한다고 생각하지만 Linux에서 실행 중이고 Windows 용 코드를 출력한다면 당신이 추구하는 것이 아닐 수도 있습니다. 다른 두 댓글 작성자가 무엇을 언급했는지 잘 모르겠습니다.
Bill K


24

반면 \n유닉스 기반 시스템에 대한 올바른 개행 문자가 다른 시스템은 라인의 끝을 나타 내기 위해 다른 문자를 사용할 수 있습니다. 특히 Windows 시스템 \r\n은를 사용 하고 초기 MacOS 시스템은 \r.

사용하여 %n귀하의 형식으로 문자열에, 당신은에 의해 반환 된 값을 사용하는 자바에게 System.getProperty("line.separator")현재 시스템에 대한 행 단락이다.


18

경고:

NETWORKING 코드를 수행하는 경우 실행중인 플랫폼에 따라 네트워크를 통해 다른 문자를 보낼 수있는 \n것과는 대조적으로 의 확실성을 선호 할 수 있습니다 %n.


8

"정답"은 정확히 무엇을 하려는지에 따라 다릅니다.

\ n은 항상 "unix 스타일"줄 끝을 제공합니다. \ r \ n은 항상 "dos style"줄 끝을 제공합니다. % n은 실행중인 플랫폼의 줄 끝을 제공합니다.

C는 이것을 다르게 처리합니다. "텍스트"또는 "바이너리"모드로 파일을 열도록 선택할 수 있습니다. 바이너리 모드에서 파일을 열면 \ n "유닉스 스타일"라인 엔딩을 제공하고 "\ r \ n"은 "dos 스타일"라인 엔딩을 제공합니다. dos / windows 시스템에서 "텍스트"모드로 파일을 열면 \ n 작성하면 파일 처리 코드가 파일을 \ r \ n으로 변환합니다. 따라서 텍스트 모드에서 파일을 열고 \ n을 사용하면 플랫폼 별 줄 끝이 표시됩니다.

Java 디자이너가 "텍스트"및 "바이너리"파일 모드에 대한 C의 엉뚱한 아이디어를 복제하고 싶지 않은 이유를 알 수 있습니다.


4

자바에서는 \n항상 \u000A줄 바꿈 문자를 생성 합니다. 특정 플랫폼에 대한 올바른 줄 구분 기호를 얻으려면 %n.

따라서 예를 들어 네트워킹에서 줄 바꿈 문자 \n가 필요하다고 확신 할 때 사용 하십시오 \u000A.
다른 모든 상황에서는%n


4

이 답변은 System.out.printf()또는 System.out.format()또는 Formatter객체를 사용할 때만 참 입니다. %nin 을 사용 하면 개행이 아닌 System.out.println()단순히을 생성합니다 %n.


0

% n 형식 지정자는 운영 체제간에 이동할 수있는 줄 구분 기호입니다. 그러나 System.out.print 또는 System.out.println 함수에 대한 인수로 사용할 수 없습니다.

항상 \ n 위에있는이 새 버전의 줄 구분 기호를 사용하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.