1

我相信你们中的大多数人会认为这是您多次听到(并回答)关于 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 行末尾,finalResult包含"12/03/2013|04-AERTY|12.4724"getAction()返回"expt"。因此,在第 5 行末尾,finalResult包含“12/03/2013|04-AERTY|12.4724|expt”

这是,当我在 Eclipse 中调试或运行应用程序时。一旦在 UNIX 系统上构建相同的应用程序以生成“战争”文件,并将战争部署在 tomcat 服务器上,问题就出现了。当我在部署的战争上运行应用程序时,最后一行不包含连接值。所以在第 5 行的末尾,finalResult只包含"12/03/2013|04-AERTY|12.4724"。我希望它包含“12/03/2013|04-AERTY|12.4724|expt”,就像在 Eclipse 中运行时一样。

我也尝试过stringbufferstringbuilder"+"运算符,但似乎没有任何效果。我什至没有例外。有人可以帮我解决这个问题,或者至少让我明白我在这里可能做错了什么吗?

再次强调一下,eclipse(在windows机器上)和UNIX机器上的代码完全相同。我对它们做了一个差异。

这是我在放置消息框后得到的:

  • 消息框 1:“修剪后的结果:'12/03/2013|04-AERTY|'”
  • 消息框 2:“子字符串后的结果:'12/03/2013|04-AERTY|'”
  • 消息框 3:“返回:'12.4724'”
  • 消息框 4:“操作:'|expt'”
  • 消息框 5:“最终结果:'12/03/2013|04-AERTY|12.4724|expt'”

消息框 5 的输出是我使用 eclipse 执行代码时收到的输出在部署的战争上运行时,消息框 1-4 的输出与上面相同,但消息框 5 显示:“最终结果:'12/03 /2013|04-AERTY|12.4724"

4

1 回答 1

4

不清楚额外的“|”在哪里 意味着来自 - 如果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将进一步调查。

于 2013-06-07T06:16:47.540 回答