在我的一个java类中,我想写一个看起来像这样的结果:
String LINE_SEPARATOR = System.lineSeparator();
Stringbuilder result = new Stringbuilder();
result.append("some characters");
result.append(LINE_SEPARATOR);
使用此代码的类将传递给基于GWT的前端。 GWT将GWT使用的所有java类(例如前端的所有类)编译成javascript。但是,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 :(得分:3)
最简单的事情可能会起作用(从头顶开始):
String LINE_SEPARATOR = GWT.isClient() ? "\n" : getLineSeparator();
@GwtIncompatible
private static String getLineSeparator() {
return System.lineSeparator();
}
这需要最新版本的GWT(至少2.6,可能是2.7)。
另一种方法是使用带有简单提供者类的超级源:
public class LineSeparatorProvider {
public final String LINE_SEPARATOR = System.lineSeparator();
}
// in super-source
public class LineSeparatorProvider {
public final String LINE_SEPARATOR = "\n";
}
请注意,在将来的GWT版本中,System.getProperty
将起作用(对于某些属性),因此您可以使其适用于line.separator
。
... 或,您可以在任何地方使用\n
,并且只有当您确实需要\r\n
然后执行replace("\n", "\r\n")
时。
(如果你问我,我在任何地方都使用\n
,即使在Windows上也是如此)
答案 1 :(得分:1)
一个简单的解决方案是:
String systemLineSeparator;
String platform = Window.Navigator.getPlatform();
if(platform.toLowerCase().contains("windows")) {
systemLineSeparator = "\r\n";
}
else {
systemLineSeparator = "\n";
}
更高级的解决方案可以使用延迟绑定。