Java에서 플랫폼 종속적 줄 바꿈을 어떻게 얻습니까? 어디서나 "\n"
을 사용할 수 없습니다.플랫폼 종속적 인 개행 문자는 어떻게 얻습니까?
답변
를 얻을 수
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을 참조하십시오.
당신은 당신이 자바 1.5 이상과 및 String.format 사용하는 경우 line.separator에 속성뿐만 아니라 행 단락에게
파일에 개행 문자를 쓰려면 BufferedWriter의 newLine() 메서드를 사용하면됩니다.
을 사용하여 파일
commons-lang 라이브러리는 자바 7 SystemUtils.LINE_SEPARATOR
예, 타사 라이브러리를 설치하면 플랫폼 독립적 인 새 행을 얻을 수 있습니다! #facepalm –
@Shervin 물론 그렇게하지는 않겠지 만, 내가 작업 한 많은 프로젝트는 이미 commons-lang과 이전 버전의 Java를 사용하고 있습니다. 그래서 당신이 이미 commons-lang을 사용하고 있다면, 이것은 현명한 대답입니다. 나는 그것을 지적 할 필요가 없다고 느꼈다. 분명히 틀렸다. – lexicalscope
이 라이브러리는 이미이 라이브러리를 사용하고있는 프로젝트에 좋은 제안입니다. –
이라는 사용할 수있는 상수 필드가 지금 System.lineSeparator()
방법을 가지고 새로운 라인을 작성하는 플랫폼 독립적 인 방법을 제공합니다 클래스 BufferedWriter
의 방법 newLine()
.
자주 (잘) 한 번에 2를 사용하는 것을 발견했을 때, 몇개의 라인 분리자를 돌려주는'lineSeperator (int)'라는 오버로드 된 메소드를 제공하는 것이 좋았을 것입니다. – Kon
@Kon [이 답변] (http://stackoverflow.com/a/24946101/594137)에 기반 :'String.join ("", Collections.nCopies (5, System.lineSeparator()))' –
String + String 등을 사용하여 문자열을 추가하지 마십시오. 대신 StringBuilder를 사용하십시오.
이것은 실제로 대부분의 경우 중요하지 않습니다. [Coding Horror의 Jeff Atwood는이 특별한 종류의 미세 최적화에 대한 블로그 게시물을 제작했습니다] (http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of -micro-optimization-theater.html). "string + string'"과 같은 주장을하기 전에 항상 메트릭을 수행하십시오. – Spoike
제프의 기사는 실행 시간에만 닿기 때문에 약간 꺼져있을 수도 있습니다. Java에서의 문자열 연결은 실행 속도뿐 아니라 GC에서 정리할 메모리에 남겨 두는 쓰레기의 양도 증가시켜 GC 실행 빈도가 높아질 수 있습니다. 이는 환경 및 구성에 따라 문제 일 수도 있고 아닐 수도 있습니다. – Lajcik
Lajcik, 정말 많은 문자열 조작을하는 사람들을 제외하고는 모든 경우에 대해 사전 최적화 된 것으로 판단됩니다. StringBuffer는 마이너 연결 요구 사항에 대한 반 패턴입니다. 많은 경우 위의 여러 줄 예제보다 String1 + separator + String2가 읽기 쉽습니다. 게다가, 나는 메모리 & GC가 SB를 추가함으로써 긍정적으로 영향을 받는지 테스트 할 것을 제안한다. 많은 경우 나는 그것이 아닌 것 같아요. 테스트할만한 가치가없는 경우 사전 최적화가되어있어 가독성에 중점을 둡니다. –
StringBuilder newLine=new StringBuilder();
newLine.append("abc");
newline.append(System.getProperty("line.separator"));
newline.append("def");
String output=newline.toString();
위의 스 니펫에는 플랫폼과 관계없이 새로운 행으로 구분 된 두 개의 문자열이 있습니다.
감사합니다. 확실 System.getProperty ("line.separator"); "Line 1"+ System.getProperty ("line.separator") + "Line 2" – Buttons840
오, 내 "1 호선"+ System.getProperty ("line.separator")를 사용하는 데 지쳐있다. + "Line 2"는 실제로 내가 본 것 중 가장 못된 것 중 하나입니다. 다른 곳에서 상수를 선언하는 것만으로도 고통 스러울 것입니다. – abahgat
최소한이 작업은 log4j 문에 전달되는 문자열로 작동하지 않습니다. 마지막에 줄 바꿈이있는 예제를 만들면 잠재적으로 문제가 숨겨집니다. 또한, 문자열 s2는 '%% n'을 사용하여 혼란 스럽습니다. –