【问题标题】:line.seperator does not replace \nline.separator 不替换 \n
【发布时间】:2014-06-13 04:58:44
【问题描述】:

假设我有一个 TextArea 供用户输入。而且它是多线的。

所以,我将以下文本写入其中。

"检测线
和线和
行”

嗯,这里要提醒一下。要放置行分隔符,用户只需按 Enter。现在,我想用“”替换输入文本中的所有行分隔符。我希望输出是

“测试!线!和!线!和!线”

为了做到这一点,我使用了以下代码。

System.out.println(getText().replace(System.getProperty("line.separator"), "!"));

但是,输出与输入文本相同。但是,如果我将上面的代码替换为

System.out.println(getText().replace("\n", "!"));

输出结果与预期一致。

认为这是独立于操作系统的。我在 Windows XP 下对此进行了测试。

如何将 \n 替换为能够在不同操作系统中运行的东西。它应该是 System.getProperty("line.separator") 但我不明白为什么它在这里不起作用。

谢谢。

【问题讨论】:

  • 这个输入是通过 Java 事物(例如 Swing/JavaFX)还是通过本机 Windows 事物(例如控制台)? (抱歉,大脑太煎熬,想不出比“事物”更合适的词)如果没记错的话,Java 应该在内部使用\n,所以只要你不与之交互,你可能不需要line.separator 属性任何本机 Windows 组件。不过,这不是 100% 确定的。
  • 澄清一下:您期待的是“Testing line!and line and!line”还是“Testing!line!and!line!and!line”?
  • @Laambi 我的错。空间现在很好。行分隔符在这里很麻烦。 :D

标签: java cross-platform newline


【解决方案1】:

JTextArea(或 JTextPane)的Document 始终将换行字符串存储为“\n”。因此,当使用JTextArea 时,以下代码将适用于所有平台:

System.out.println(getText().replace("\n", "!"));

但是,如果您使用textArea.write(...) 方法,“\n”将被您平台的“line.separator”替换。

查看Text and New Lines,它试图更详细地解释这种行为。

【讨论】:

  • 这是否意味着在任何平台上使用 JTextArea 或 JTextPane 都会将行分隔符存储为“\n”而不管操作系统属性如何?
  • 是的,文档不关心操作系统属性。
  • 这回答了我的问题。但是,我实际上正在编写一个库。 JTextArea 只是为了测试它。如果以后有人使用其他一些输入组件怎么办?不摆动。我如何保证它会起作用?
  • That answers my question. - 那么答案应该被接受,这样人们就知道答案已经找到了。 How can I guarantee that it will work?你的问题没有意义。你不能保证有人更改了你的代码。
  • 这是我正在编写的库。在这个库中,有一个函数可以简单地将 line.separator 替换为另一个 CharSequence。 JTextArea 是为了测试这个功能。但是如果有人使用这个(作为库/.jar),带有非摆动输入组件,我怎么能保证这个函数仍然会替换 line.separator?因为您在 swing 中说行分隔符不是 line.separator 属性。它始终是 \n 字符。
猜你喜欢
  • 1970-01-01
  • 2016-08-16
  • 2020-05-16
  • 2012-07-03
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
相关资源
最近更新 更多