Java在不同计算机上进行字符串比较时返回不同的结果

4

我正在开发一个小程序,其中一个功能是从数据库中读取一组字符串,并将其与同一表中的另一个字符串进行比较。如果它们相同,就会呈现一个字符串,如果它们不同,则会呈现两个字符串。

在我的开发机器上,这个功能按预期工作。当我在客户的测试计算机上安装应用程序时,该过程的行为不同。具体来说,在我的计算机上返回的字符串相同,但它们在客户端的计算机上经常返回不同。

这段代码很简单:

if (!item.getDescription().equals(item.getBackDescription())) {
        item.setDescriptionDisplay(item.getDescription() + "   (" + item.getBackDescription() + ")");
    } else {
        item.setDescriptionDisplay(item.getDescription());
}

这是它发生的屏幕截图(我的计算机在顶部):

From my computer From their computer

我已经考虑并尝试了几种方法:
  • 将 JRE 与应用程序捆绑在一起,因为他们的电脑上没有安装。我已经在我的电脑上安装了 JRE。我想知道是否存在某个运行时的问题或差异,因此我在我的计算机上卸载了 JRE(和 JDK),以确保它使用我复制的应用程序中捆绑的版本。

  • 我想知道我在自己的计算机上测试数据是否有问题。我将他们机器上使用的表导出,并将其读入到我的数据库中,以确保数据相同。

其他注意事项:

  • 他们的计算机上不总是有错的数据。应标记为不同的事情都被标记为不同,而不是每件应该标记为相同的事情都被错误地标记了。

非常感谢任何帮助,我已经折腾了几个小时。谢谢。


2
客户端的编码方式可能不同吗?数据是如何输入到应用程序中的? - Vivin Paliath
1
当你复制他们的数据时,我假设它对你来说工作正常?描述和“背面描述”是否都保存在数据库中? - Vivin Paliath
请参考以下链接了解如何在启动二进制文件时设置默认编码:https://dev59.com/P3RC5IYBdhLWcg3wP-n5。尝试在两台机器上使用相同的显式编码运行它,看看是否可以按预期工作。 - Andy Turner
  1. 我一时半会儿想不起来,但我认为应该是这样的。
  2. 使用SQL Server的“生成脚本”工具。
  3. SQL Server 2008 r2
当我实际进入客户计算机上的数据库并使用SQL比较值时,数据库显示它们相同。
- loganhuskins
另一个重要问题是,我认为,这两台机器是否使用类似的操作系统,例如Windows to Windows。我知道在您的Java代码中可以使用一组转义字符并且它可以正常工作,但是在另一台机器上可能无法正常工作。请检查一下,以确保不是这种情况,因为我知道对于Windows和Unix来说,转义字符“0”不会起到相同的作用。 - SomeStudent
显示剩余8条评论
1个回答

1

你尝试过删除一些空格吗?尝试:

if (!item.getDescription().trim().equals(item.getBackDescription().trim())) {
        item.setDescriptionDisplay(item.getDescription() + "   (" + item.getBackDescription() + ")");
    } else {
        item.setDescriptionDisplay(item.getDescription());
}

我现在会尝试这个,但我不认为这是太多空白的问题,如果你是这个意思的话。我已经尝试用下划线替换所有的空格来进行视觉测试了。 - loganhuskins
这解决了问题。很奇怪,因为当我比较数据库中的实际值时,它们是相同的。你有什么想法吗?谢谢。 - loganhuskins
1
一些数据库供应商会为您修剪字符串。 - Tobb
他们正在使用相同版本的相同数据库,表中的数据完全相同。它们都是SQL Server 2008 r2。如果它们不同,我可以看到这会导致问题,但在这种情况下很奇怪。 - loganhuskins
1
数据库可能配置不同。例如,两个环境中的ANSI_PADDING可能不同。请参阅https://support.microsoft.com/en-us/kb/316626和https://support.microsoft.com/en-us/kb/231830。但这只是几种可能性之一。 - messivanio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接