java中的字符串连接在一个系统上不起作用

java中的字符串连接在一个系统上不起作用,java,eclipse,string,war,concat,Java,Eclipse,String,War,Concat,我相信你们中的大多数人都会认为这是关于Java中字符串连接的同一个问题,你们已经听过多次(并回答过)。但相信我,这是不同的。事实上,它是如此的不同,以至于我在这里发布它时甚至有些犹豫。但不管怎样,它在这里。我有一段代码如下: public void handleSuccess(String result) { result = result.trim(); MessageBox.alert("Information","Result after trimming:

我相信你们中的大多数人都会认为这是关于Java中字符串连接的同一个问题,你们已经听过多次(并回答过)。但相信我,这是不同的。事实上,它是如此的不同,以至于我在这里发布它时甚至有些犹豫。但不管怎样,它在这里。我有一段代码如下:

public void handleSuccess(String result) 
{
       result = result.trim();
       MessageBox.alert("Information","Result after trimming: '" + result + "'");
       result = result.substring(result.indexOf('\n') + 1);
       MessageBox.alert("Information","Result after substring: '" + result + "'");
       String returns = getReturns();
       MessageBox.alert("Information","Returns: '" + returns + "'");
       String action = getAction();
       MessageBox.alert("Information","Action: '" + action + "'");
       String finalResult = result + returns + action;
       MessageBox.alert("Information","Final result: '" + finalResult + "'");
}            
现在这里的情况是,所有这些:getReturns(),result和getAction()返回非空值,事实上,字符串finalResult包含执行最后一行后连接的值。 因此,在第1行,“结果”包含“12/03/2013 | 04-AERTY”。第1,2行末尾的结果值保持不变getReturns()返回值12.4724。因此,在第3行末尾,最终结果包含“12/03/2013 | 04-AERTY | 12.4724”getAction()返回“expt”。因此,在第5行末尾,finalResult包含“12/03/2013 | 04-AERTY | 12.4724 | expt”

也就是说,当我在eclipse中调试或运行应用程序时。只要在UNIX系统上构建相同的应用程序以生成“war”文件,并将war部署到tomcat服务器上,问题就会迎刃而解。在部署的war上运行应用程序时,最后一行不包含连接的值。因此,在第5行末尾,finalResult只包含“12/03/2013 | 04-AERTY | 12.4724”。我希望它像在eclipse中运行时一样包含“12/03/2013 | 04-AERTY | 12.4724 | expt”

我也尝试了stringbufferstringbuilder“+”操作符,但似乎没有任何效果。我甚至没有例外。 有没有人能帮我解决这个问题,或者至少让我明白我在这里可能做错了什么

再次强调一下,eclipse(在windows机器上)和UNIX机器上的代码完全相同。我已经对他们做了区分

以下是我放置消息框后得到的信息:

  • 消息框1:“修剪后的结果:'12/03/2013 | 04-AERTY |'”
  • 消息框2:“子字符串后的结果:'12/03/2013 | 04-AERTY |'”
  • 消息框3:“返回:'12.4724'”
  • 消息框4:“操作:“|导出”
  • 消息框5:“最终结果:'12/03/2013 | 04-AERTY | 12.4724 | expt'”
消息框5输出是我使用eclipse执行代码时收到的输出
在部署的war上运行时,消息框1-4的输出与上面相同,但消息框5说:“最终结果:'12/03/2013 | 04-AERTY | 12.4724”

不清楚额外的“|”来自何处-如果
getAction()
只返回
expt
,结果将是
12/03/2013 | 04-AERTY | 12.4724 | expt

无论如何,我认为可以肯定地说,字符串连接将很好地工作,而其他一些东西是错误的。您应该添加更多诊断,记录所有内容:

public void handleSuccess(String result) {
    result = result.trim();
    log.info("Result after trimming: '" + result + "'");

    result = result.substring(result.indexOf('\n') + 1);
    log.info("Result after substring: '" + result + "'");

    String returns = getReturns();
    log.info("Returns: '" + returns + "'");

    String action = getAction();
    log.info("Action: '" + action + "'");

    // It's not clear what this is meant to do. I suggest you remove it and
    // use logging instead.
    MessageBox.alert("Information", "The selected action is " + action, null);             

    String finalResult = result + returns + action;
    log.info("Final result: '" + finalResult + "'");
我怀疑您会发现,在断开的情况下,
action
是一个空字符串

请注意,我特意在每个记录的值周围添加了引号。这意味着,如果字符串末尾存在导致问题的不可打印字符,您应该能够在日志记录中检测到


编辑:根据注释线程,当这些字符串变成消息框时(事实证明这是在GWT中运行的),早期字符串似乎有问题,因为在断开的情况下,在诊断中看不到结束的
。OP将进一步调查。

不清楚额外的“|”是从哪里来的-如果
getAction()
只返回
expt
,结果将是
12/03/2013 | 04-AERTY | 12.4724 | expt

无论如何,我认为可以肯定地说,字符串连接将很好地工作,而其他一些东西是错误的。您应该添加更多诊断,记录所有内容:

public void handleSuccess(String result) {
    result = result.trim();
    log.info("Result after trimming: '" + result + "'");

    result = result.substring(result.indexOf('\n') + 1);
    log.info("Result after substring: '" + result + "'");

    String returns = getReturns();
    log.info("Returns: '" + returns + "'");

    String action = getAction();
    log.info("Action: '" + action + "'");

    // It's not clear what this is meant to do. I suggest you remove it and
    // use logging instead.
    MessageBox.alert("Information", "The selected action is " + action, null);             

    String finalResult = result + returns + action;
    log.info("Final result: '" + finalResult + "'");
我怀疑您会发现,在断开的情况下,
action
是一个空字符串

请注意,我特意在每个记录的值周围添加了引号。这意味着,如果字符串末尾存在导致问题的不可打印字符,您应该能够在日志记录中检测到


编辑:根据注释线程,当这些字符串变成消息框时(事实证明这是在GWT中运行的),早期字符串似乎有问题,因为在断开的情况下,在诊断中看不到结束的
。OP将进一步调查。

如果您能合理地格式化代码,这将非常有帮助。缩进使它很难阅读。我现在会修复它,但请在下次发布时考虑一下。那么,您是否尝试过远程调试它?听起来可能是行尾问题,也可能是编译器优化了最后一个操作。胡乱猜测:Unix上的
.getReturns()
函数的输出末尾多了一个0字符。这个函数的代码是什么?@fge:Good point-我已经在我的答案中调整了日志记录,以帮助检测。现在,在失败的情况下,您可以包括MessageBox的输出吗?如果您合理地格式化代码,这将非常有帮助。缩进使它很难阅读。我现在会修复它,但请在下次发布时考虑一下。那么,您是否尝试过远程调试它?听起来可能是行尾问题,也可能是编译器优化了最后一个操作。胡乱猜测:Unix上的
.getReturns()
函数的输出末尾多了一个0字符。这个函数的代码是什么?@fge:Good point-我已经在我的答案中调整了日志记录以帮助检测。现在,您可以在失败的情况下包含MessageBox的输出吗?不,先生,操作不是空的。正如我所说,当我在eclipse上执行相同的代码时,它工作得很好。在这两种情况下,接收到的值相同,但在行尾处除外