JMS TextMessage 无法识别 CR LF

JMS TextMessage not recognizing CR LF

在我看来,包含 Java.lang.String 的 JMS TextMessage 没有将 \r\n 识别为换行符,而是将 CR LF 视为 [=18 上输入的一部分=]机.

@Override
    public void onMessage(Message message) {
        try {
      String text = ((TextMessage)message).getText();
      String line=null;
      BufferedReader br = new BufferedReader(new StringReader(text));      
      for(line = br.readLine(); line != null; line = br.readLine()) {
           System.out.println(line);
      }
      catch (JMSException e) {
             System.err.println( "Error processing message: " + e.getMessage() );
             e.printStackTrace();
        }

任何人都可以就此提供任何意见和/或建议。

从你的问题中还不完全清楚,但听起来字符串在 输入 上被正确读取,但它没有被 println 输出.

换行符和回车符等控制字符 returns 与字符串中的任何其他字符一样。它们的不同之处在于它们如何被输出设备解释,位于终端程序(例如linux终端、腻子等)或windows命令提示.

如果您将此字符串打印到未正确解释这些字符的目标,则即使字符串数据正确,您也可能看不到正确的格式。例如,一些 IDE 的输出 windows 没有正确格式化某些控制字符,因此您在 IDE 中看到的格式与在实际终端中看到的不同。

你可以试试这个:

 String text = ((TextMessage)message).getText();
 if(text!=null)
     text=text.replaceAll("\r\n","");

一个可能的原因可能是它没有从源系统正确发送。我会去那里看看接下来可以做什么。大多数语言都提供跨平台的 EOL 常量,这可能会派上用场。例如,Ruby 有四个:

irb(main):002:0> require 'English'; test = "One"+ $INPUT_RECORD_SEPARATOR
=> "One\n"
irb(main):003:0> test1 = "One" + $/
=> "One\n"
irb(main):004:0> test2 = "One"+$-0
=> "One\n"
irb(main):005:0> require 'English';test3="One"+$RS
=> "One\n"
irb(main):006:0>