2008-10-16 5 views

답변

333

를 얻을 수

System.getProperty("line.separator"); 

를 사용 (또는 다른 수 당신이로 %n을 사용할 수 있습니다) 방법을 포맷

Calendar c = ...; 
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY%n", c); 
//Note `%n` at end of line         ^^ 

String s2 = String.format("Use %%n as a platform independent newline.%n"); 
//   %% becomes %  ^^ 
//          and `%n` becomes newline ^^ 

자세한 내용은 Java 1.8 API for Formatter을 참조하십시오.

+6

감사합니다. 확실 System.getProperty ("line.separator"); "Line 1"+ System.getProperty ("line.separator") + "Line 2" – Buttons840

+34

오, 내 "1 호선"+ System.getProperty ("line.separator")를 사용하는 데 지쳐있다. + "Line 2"는 실제로 내가 본 것 중 가장 못된 것 중 하나입니다. 다른 곳에서 상수를 선언하는 것만으로도 고통 스러울 것입니다. – abahgat

+4

최소한이 작업은 log4j 문에 전달되는 문자열로 작동하지 않습니다. 마지막에 줄 바꿈이있는 예제를 만들면 잠재적으로 문제가 숨겨집니다. 또한, 문자열 s2는 '%% n'을 사용하여 혼란 스럽습니다. –

618

당신은 당신이 자바 1.5 이상과 및 String.format 사용하는 경우 line.separator에 속성뿐만 아니라 행 단락에게

41

파일에 개행 문자를 쓰려면 BufferedWriter의 newLine() 메서드를 사용하면됩니다.

11

을 사용하여 파일

21

commons-lang 라이브러리는 자바 7 SystemUtils.LINE_SEPARATOR

+14

예, 타사 라이브러리를 설치하면 플랫폼 독립적 인 새 행을 얻을 수 있습니다! #facepalm –

+18

@Shervin 물론 그렇게하지는 않겠지 만, 내가 작업 한 많은 프로젝트는 이미 commons-lang과 이전 버전의 Java를 사용하고 있습니다. 그래서 당신이 이미 commons-lang을 사용하고 있다면, 이것은 현명한 대답입니다. 나는 그것을 지적 할 필요가 없다고 느꼈다. 분명히 틀렸다. – lexicalscope

+2

이 라이브러리는 이미이 라이브러리를 사용하고있는 프로젝트에 좋은 제안입니다. –

589

이라는 사용할 수있는 상수 필드가 지금 System.lineSeparator() 방법을 가지고 새로운 라인을 작성하는 플랫폼 독립적 인 방법을 제공합니다 클래스 BufferedWriter의 방법 newLine().

+5

자주 (잘) 한 번에 2를 사용하는 것을 발견했을 때, 몇개의 라인 분리자를 돌려주는'lineSeperator (int)'라는 오버로드 된 메소드를 제공하는 것이 좋았을 것입니다. – Kon

+7

@Kon [이 답변] (http://stackoverflow.com/a/24946101/594137)에 기반 :'String.join ("", Collections.nCopies (5, System.lineSeparator()))' –

0

String + String 등을 사용하여 문자열을 추가하지 마십시오. 대신 StringBuilder를 사용하십시오.

+15

이것은 실제로 대부분의 경우 중요하지 않습니다. [Coding Horror의 Jeff Atwood는이 특별한 종류의 미세 최적화에 대한 블로그 게시물을 제작했습니다] (http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of -micro-optimization-theater.html). "string + string'"과 같은 주장을하기 전에 항상 메트릭을 수행하십시오. – Spoike

+5

제프의 기사는 실행 시간에만 닿기 때문에 약간 꺼져있을 수도 있습니다. Java에서의 문자열 연결은 실행 속도뿐 아니라 GC에서 정리할 메모리에 남겨 두는 쓰레기의 양도 증가시켜 GC 실행 빈도가 높아질 수 있습니다. 이는 환경 및 구성에 따라 문제 일 수도 있고 아닐 수도 있습니다. – Lajcik

+6

Lajcik, 정말 많은 문자열 조작을하는 사람들을 제외하고는 모든 경우에 대해 사전 최적화 된 것으로 판단됩니다. StringBuffer는 마이너 연결 요구 사항에 대한 반 패턴입니다. 많은 경우 위의 여러 줄 예제보다 String1 + separator + String2가 읽기 쉽습니다. 게다가, 나는 메모리 & GC가 SB를 추가함으로써 긍정적으로 영향을 받는지 테스트 할 것을 제안한다. 많은 경우 나는 그것이 아닌 것 같아요. 테스트할만한 가치가없는 경우 사전 최적화가되어있어 가독성에 중점을 둡니다. –

25

String.format("%n")도 가능합니다.

또는 String.format("%n").intern() 일부 바이트를 절약 할 수 있습니다.

+7

이것은 Alex B의 대답과 같습니다. – Spoike

+14

오, 이제 알겠습니다. 그는 그의 대답에 대해 많은 양의 비 칠한 재료를 썼다. ;-) – ceving

+0

이 작업을 시도했지만 메모장에서 파일을 보았을 때 줄 바꿈을 인식하지 못합니다. – mr5

7
StringBuilder newLine=new StringBuilder(); 
newLine.append("abc"); 
newline.append(System.getProperty("line.separator")); 
newline.append("def"); 
String output=newline.toString(); 

위의 스 니펫에는 플랫폼과 관계없이 새로운 행으로 구분 된 두 개의 문자열이 있습니다.

관련 문제