JMS TextMessage无法识别CR LF

时间:2015-10-01 17:55:19

标签: java jms java-io carriage-return linefeed

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

@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();
        }

任何人都可以提供任何输入和/或推荐。

3 个答案:

答案 0 :(得分:2)

您的问题并不完全清楚,但听起来字符串在输入上正确读取,但println 输出没有正确格式化 EM>

控制字符(如换行符和回车符)就像字符串中的任何其他字符一样。使它们与众不同的是它们如何被输出设备解释,如终端程序(例如linux终端,putty等)或Windows命令提示符。

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

答案 1 :(得分:1)

一个可能的原因可能是它未从源系统正确发送。我会在那里看看接下来可以做些什么。大多数语言都提供跨平台的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>

答案 2 :(得分:0)

你可以试试这个:

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