在我看来,包含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();
}
任何人都可以提供任何输入和/或推荐。
答案 0 :(得分:2)
您的问题并不完全清楚,但听起来字符串在输入上正确读取,但println
输出没有正确格式化1> 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","");