代码之家  ›  专栏  ›  技术社区  ›  SteelBytes

在PHP和Java中需要相同的字符串比较功能

  •  0
  • SteelBytes  · 技术社区  · 15 年前

    我已经整理了我在PHP和Java之间移动的字符串列表。为了能够搜索到这些数据,我需要相同的比较函数。

    知道我可以使用什么样的字符串比较函数,这两个函数的结果总是一样的吗?PHP的StrcMP()与Java的字符串。

    是的,我知道我可以做自己的字符串比较,仔细地逐字符比较,但我希望有一个简单的答案。

    附言,不管大小写敏感与否,只要它是一致的。

    2 回复  |  直到 15 年前
        1
  •  1
  •   SteelBytes    15 年前

    由于本例中的php代码允许变慢,所以我最终使用了自己的代码……

    function unicodeStrCmp($s1,$s2)
    {
    // designed to be same as java's String.compareTo
    // not extensivley tested, and doesn't deal with surrogate pairs
    $l1 = mb_strlen($s1);
    $l2 = mb_strlen($s2);
    $i = 0;
    while ($i<$l1 && $i<$l2)
    {
        $c1 = mb_convert_encoding(mb_substr($s1,$i,1),'utf-16le');
        $c1 = ord($c1[0])+(ord($c1[1])<<8);
        $c2 = mb_convert_encoding(mb_substr($s2,$i,1),'utf-16le');
        $c2 = ord($c2[0])+(ord($c2[1])<<8);
        $res = $c1-$c2;
        if ($res!=0)
            return $res;
        $i++;
    }
    return $l1-$l2;
    }
    
        2
  •  0
  •   Stephen C    15 年前

    另一种方法是在Java中实现自己的“字节串”类,用 compareTo 方法。这样做的目的是避免将字节表示(以UTF8编码或其他形式)转换为Unicode字符,从而避免使用错误字符编码的可能性。

    但是这将是非常尴尬的,因为Java的所有文本处理API都是基于字符串类型的,因此是基于Unicode的(或多或少)。此外,如果您没有对字符集或编码进行任何假设,您将无法以任何方式解释字节;例如,您无法解析单词等。