2014-10-23 2 views
3

은, 내가 이렇게 보이는 결과를 작성하려는 :GWT 플랫폼 독립적 인 개행 문자

String LINE_SEPARATOR = System.lineSeparator(); 
Stringbuilder result = new Stringbuilder(); 
result.append("some characters"); 
result.append(LINE_SEPARATOR); 

GWT 기반의 프론트 엔드에 전달이 코드를 사용하는 클래스입니다. GWT는 GWT에서 사용되는 모든 자바 클래스 (예 : 앞선 모든 클래스)를 자바 스크립트로 컴파일합니다. 그러나 GWT는 System.lineSeparator()를 컴파일 할 수 없으므로 javascript에는 해당 메소드가 없습니다.

String LINE_SEPARATOR = System.getProperty(line.separator); 

String LINE_SEPARATOR = String.format("%n"); 

는 GWT 컴파일러 예외가 발생합니다. 그러나

String LINE_SEPARATOR = "\r\n"; 

은 작동하지만 플랫폼에 독립적입니다.

GWT와 호환되는 플랫폼 독립적 인 개행 문자를 어떻게 얻을 수 있습니까?

+0

이유는 단지'
'태그를 사용할 수 없습니다 (당신이 저를 요구하는 경우에, 난 그냥 심지어 Windows에서, 사방 \n를 사용하는 것)? – pratZ

+0

결과 문자열은 html 환경 외부에서도 사용됩니다. 결과를 로깅하고 파일에 기록합니다. –

답변

0

간단한 해결책은 다음과 같습니다

String systemLineSeparator; 
String platform = Window.Navigator.getPlatform(); 
if(platform.toLowerCase().contains("windows")) { 
    systemLineSeparator = "\r\n"; 
} 
else { 
    systemLineSeparator = "\n"; 
} 

더 고급 솔루션이 결합 연기 사용할 수 있습니다. 아마도 (내 머리의 상단에서) 일할 수있는

+0

Window.Navigator.getPlatform()은 GWT와 잘 동작합니다. 네이티브 Java에서 코드를 실행하면 UnsatisfiedLinkError가 발생합니다. –

+0

응용 프로그램의 부트 스트래핑 중 lineSeparator- 변수를 설정할 수 있습니다. 서버에서는 System.lineSeparator()를 사용합니다. 클라이언트 Window.Navigator. –

3

간단한 일 :

String LINE_SEPARATOR = GWT.isClient() ? "\n" : getLineSeparator(); 

@GwtIncompatible 
private static String getLineSeparator() { 
    return System.lineSeparator(); 
} 

GWT의 최신 버전 (2.6 이상, 아마도 2.7)을 필요로한다.

대안은 간단한 공급자 클래스와 슈퍼 소스를 사용하는 것입니다 : GWT의 이후 버전에서는, System.getProperty는 (일부 속성에 대한) 작동합니다

public class LineSeparatorProvider { 
    public final String LINE_SEPARATOR = System.lineSeparator(); 
} 

// in super-source 
public class LineSeparatorProvider { 
    public final String LINE_SEPARATOR = "\n"; 
} 

주 그래서 당신은 아마도 그것이 작동되도록 할 수 line.separator입니다.

... 또는, 당신은 어디서나 \n을 사용할 수 있고 당신이 정말로 \r\n을해야하는 경우에만 다음 replace("\n", "\r\n")을한다.

+0

getLineSeparator()에 @GwtIncompatible 태그가있는 경우이 메서드는 javascript로 컴파일되지 않으며 GWT는 메서드를 찾을 수 없음 예외를 throw합니다. 이 메서드는 if 문에서 호출되고 소스가 없습니다. –

+0

수퍼 소스 아이디어는 약간 과잉으로 보인다. 그래서 나는 지금 "\ n"해결책을 고수 할 것이다. –

관련 문제