【问题标题】:How to remove newline from string如何从字符串中删除换行符
【发布时间】:2022-02-03 05:09:58
【问题描述】:

我的应用程序流程就像我需要创建一个固定长度的消息并通过 mqs 将其发送给最终消费者。

AAA
BBB
CCC
DDD

需要转换为AAABBBCCCDDD并通过mqs发送到终端应用程序 为此我使用下面的代码

String response = "AAA
BBB
CCC
DDD";
response.replaceAll(System.getProperty("line.separator"), "");
response = AAABBBCCCDDD

到目前为止一切都很好,但是当消息到达终端系统时,他们抱怨每行后面都有一个空格,当通过十六进制检查时,看起来下一行的位置插入了一个 0D 字符

AAA BBB CCC DDD -> 这是他们的接收方式

AAA0DBBB0DCCC0DDDD -> Hex 启用 Hex'0D'(我认为它更像是分隔符,EOL 什么的)

有人可以建议我如何摆脱这些正在添加的字符吗?

【问题讨论】:

  • 字符串是如何生成的?

标签: java


【解决方案1】:

0x0d 的 ASCII 码是 CR(回车)。

当字符串包含 CR+LFs 作为行分隔符(例如在 Windows 上)并且您的系统使用 LFs 作为行分隔符(例如在 Unix 后代上)时,System.getProperty("line.separator") 只会给您LF。所以你的代码只删除了LFs,更不用说CRs了。

如果你只是去掉CRLF,下面可能就足够了。

response.replaceAll("[\\r\\n]", "");

【讨论】:

  • 谢谢@hata 我试过responseTransactions.replaceAll("\r?\n", ""); 这对我有用,终端系统已经确认现在他们没有在消息中收到任何空格或0D。也非常感谢您的解释。
  • @Trups 您可以在此答案中删除反斜杠中的转义符。或者通过 this 将正则表达式长度减半。
【解决方案2】:

使用 any linebreak 正则表达式 \R:

response.replaceAll("\\R", "");

根据documentation

\R 任何 Unicode 换行序列,等价于
\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

【讨论】:

    【解决方案3】:

    如果您想删除输入中的空白分隔符,保留所有非空白字符,那么简单的全部替换就足够了:

    String response = "AAA\nBBB\nCCC\nDDD";
    String output = response.replaceAll("\\s+", "");
    System.out.println(output); // AAABBBCCCDDD
    

    【讨论】:

      【解决方案4】:

      responseTransactions.replaceAll("\r?\n", ""); 这对我有用,终端系统也确认现在他们没有在消息中收到任何空格或 0D。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-01
        • 2016-04-14
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 2014-05-12
        • 2012-06-04
        相关资源
        最近更新 更多