繁体   English   中英

JavaScript localeCompare() 返回的结果与 Java compareTo() 不同

[英]JavaScript localeCompare() returns different result than Java compareTo()

我想要实现的是同步这两个函数的结果。 这些方法返回数字,指示引用字符串在排序顺序中是在给定字符串之前还是之后,或者与给定字符串相同。

JavaScript localeCompare 有许多参数需要设置,但我尝试过的没有任何效果。

**Java returns**:      **JavaScript returns**:
Sensor             Sensor
SensorDus          Sensor DUS
SensorEnv          Sensor E
Sensor DUS         SensorDUS
Sensor E           Sensor Env

看起来这两种方法的区别在于它们返回数字的方式。 如果参考字符串出现在比较字符串之前,则为负数; 如果参考字符串出现在比较字符串之后,则为正; 如果它们相等,则为 0。

如果这是可能的,有什么想法吗?

我对问题的解决方案。 我没有使用 localeCompare(),而是将 Java compareTo() 重写为 JavaScript 方法。 java 方法返回正数(更高)的空格,而不是 JavaScript 中没有空格的字符串。

localCompareAsInJava: function(t1,t2)
{
  var len1 = t1.length;
  var len2 = t2.length;
  var lim = Math.min(t1.length, t2.length);

  var v1 = t1;
  var v2 = t2;

  var k = 0;
  while(k < lim)
  {
    var c1 = v1[k];
    var c2 = v2[k];
    if(c1 != c2)
    {
      if(c1.charCodeAt(0) == 32 )
      {
        var charWithSpace = c1.charCodeAt(0) + c2.charCodeAt(0); 
        return charWithSpace;
      }
      else{
        return c1.charCodeAt(0) - c2.charCodeAt(0);
      }

    }
    k++;
  }
  return len1 - len2;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM