[java] printf에서 Java의 “% n”은 어떻게됩니까?

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

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



답변

빠른 Google에서 :

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

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

원본 소스


답변

%n플랫폼간에 이식 가능
\n하지 않습니다.

참조 문서에서 형식 지정 문자열 구문을 참조하십시오 .

‘n’줄 구분 기호 결과는 플랫폼 별 줄 구분 기호입니다.


답변

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

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


답변

경고:

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


답변

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

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

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

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


답변

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

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


답변

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