【问题标题】:Java returning different results for string comparisons on different computersJava 在不同的计算机上返回不同的字符串比较结果
【发布时间】:2015-10-20 21:39:06
【问题描述】:

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

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

代码很简单:

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

这是发生的屏幕截图(我的电脑在上面):

为此我已经想到并尝试了几件事:

  • 我将 JRE 与应用程序捆绑在一起,他们的计算机没有安装它。我的电脑上安装了 JRE。想知道其中一个运行时是否存在问题或差异,我在我的计算机上卸载了 JRE(和 JDK),以确保它使用的是我的应用程序副本中的捆绑版本。

  • 我想知道在我的计算机上用于测试的数据是否存在问题。我从他们的机器中导出了我正在使用的表,并将它们读入我的数据库副本以确保数据相同。

其他说明:

  • 他们计算机上的数据并不总是错误的。应该标记为不同的东西是,而不是所有应该标记为相同的东西都被标记为不正确。

任何帮助将不胜感激,我已经搞砸了几个小时。谢谢。

【问题讨论】:

  • 客户端的编码会不同吗?数据如何输入到应用程序中?
  • 可能,这是我以前没有处理过的事情。我怎么会说这样的话?数据直接从数据库中读取。
  • 当您复制他们的数据时,我假设它适合您?描述和“后述”是否都保存在数据库中?
  • 是的,这两个描述都存储在数据库中,当我复制数据时,它对我来说效果很好。我只是添加了一个说明:我没有备份数据库本身,而是导出了我正在读取的表并导入到我的数据库副本中。
  • 1) 我假设客户端直接将数据输入数据库? 2)你是如何导出数据的? 3) 它是什么类型的数据库?

标签: java string string-comparison


【解决方案1】:

您是否尝试过删除一些空格?试试:

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

【讨论】:

  • 我现在就试试这个,但我不认为这是一个问题,因为如果这就是你想要的,那么它们的空白太多了。我已经尝试用下划线替换所有空格,只是为了在视觉上进行测试。
  • 这解决了这个问题。这很奇怪,因为当我比较数据库中的实际值时,比较结果是一样的。知道为什么会这样吗?谢谢。
  • 一些数据库供应商会为您修剪字符串。
  • 他们使用的是同一个数据库的同一个版本,并且表中的数据是完全一样的。它们是 SQL Server 2008 r2。如果它们不同,我可以看到导致它的原因,但在这种情况下很奇怪。
  • 数据库的配置可能不同。例如,ANSI_PADDING 在两种环境中可能不同。看看support.microsoft.com/en-us/kb/316626 和support.microsoft.com/en-us/kb/231830。但这只是几种可能性之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2015-06-13
  • 2019-06-15
  • 1970-01-01
  • 2019-06-03
  • 2012-12-24
相关资源
最近更新 更多