为什么不推荐使用System.lineSeparator()?

时间:2018-04-12 07:34:50

标签: java intellij-idea

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中的警告。问题可能是由我的配置引起的。根据下面的答案(谢谢大家回答顺便说一句),也许我应该问"是不是"之前"为什么"下次。

4 个答案:

答案 0 :(得分:2)

  

为什么不推荐使用此功能?

这是由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有一个。

答案 1 :(得分:0)

您可以使用decimal amount = myList.Sum(x => x.Odds); String.format

%n

String output = String.format("Line one%nLine two"); 是与平台无关的换行符。

答案 2 :(得分:0)

可能System.lineSeparator()被配置为错误地用@Deprecated注释。您可以将文本光标置于方法调用上,然后按 Alt + Enter 并调用Deannotate @java.lang.Deprecated以删除注释。

The Deannoate @java.lang.Deprecated intention

答案 3 :(得分:0)

如果您的Java版本不允许System.getProperty,则可以将line.separatorSystem.lineSeparator()一起使用。

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