The screenshot of my intelliJ IDE as I could not post a picture directly(顺便说一句,使用jdk 10)由于某种原因,我需要根据输入输出一个String,并且String中可能有新的行。为了使程序在不同的平台上工作,我使用一个变量来存储System.lineSeparator()并在需要时插入它。但后来我意识到,intelliJ表明它已被弃用。所以我的问题是,为什么这个功能被弃用了?使用行分隔符是不好的做法?这样做的更好方法是什么?
final String NEW_LINE = System.lineSeparator();
String output = "Line one" + NEW_LINE + "Line two";
WriteToFile(output);
更新:图片显示了我的intelliJ IDE中的警告。问题可能是由我的配置引起的。根据下面的答案(谢谢大家回答顺便说一句),也许我应该在下次“为什么”之前问“它是不是”。
为什么这个功能被弃用了?
这是由IntelliJ中的插件,附加组件或配置设置实现的选择(正如一些评论指出的那样,他们的IntelliJ不会将其视为已弃用)。据我所知,弃用这个的唯一选择是它可能带来兼容性错误。但是,来自Java System class documentation:
lineSeparator
public static String lineSeparator()
返回依赖于系统的行分隔符字符串。它始终返回相同的值 - 系统属性line.separator的初始值。
在UNIX系统上,它返回“\ n”;在Microsoft Windows系统上,它返回“\ r \ n”。
关于System.lineSeparator()
的弃用没有任何迹象,只要它实施的版本(Java 7)和直到最后一个版本(Java 10)。如果真的让你大吃一惊,你可能想要ask the community directly。
使用行分隔符是不好的做法?
完全没有(就我的知识而言,我可能是错的),特别是因为你使用的行分隔符与你运行代码的任何系统兼容(理论上)。
这样做的更好方法是什么?
关于您对此代码的设计选择,我没有任何更好的建议。关于这一点,似乎Michal Lonski有一个。
可能System.lineSeparator()
被配置为错误地用@Deprecated
注释。您可以将文本光标定位在方法调用上,然后按Alt + Enter并调用Deannotate @java.lang.Deprecated
以删除注释。
你可以使用String.format
和%n
:
String output = String.format("Line one%nLine two");
%n
是一个独立于平台的换行符。