нужна одинаковая функция сравнения строк в PHP и Java - PullRequest
0 голосов
/ 26 марта 2010

Я отсортировал список строк, которые я перемещаю между php и java. чтобы иметь возможность искать эти данные, мне нужна та же функция сравнения.

есть идеи, какие функции сравнения строк я могу использовать, которые всегда будут давать одинаковый результат в обоих? например, php's strcmp () против java's String.compareTo ()

да, я знаю, что могу сравнить свою строку, которая тщательно обрабатывает символ, но я надеялся, что есть простой ответ.

PS, не важно, чувствителен ли регистр или нет, если он постоянен.

Ответы [ 2 ]

1 голос
/ 26 марта 2010

так как 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;
}
0 голосов
/ 26 марта 2010

Другой способ сделать это - реализовать свой собственный класс 'байтовой строки' в Java, дополненный методом compareTo. Идея состояла бы в том, чтобы избежать преобразования байтовых представлений (в кодировке UTF8 или чего-либо еще) в символы Unicode и, таким образом, избежать возможности использования неправильной кодировки символов.

Но это было бы крайне неудобно, потому что все API-интерфейсы обработки текста в Java основаны на типе String и, следовательно, основаны на Unicode (более или менее). Кроме того, если бы вы не делали каких-либо предположений относительно наборов символов или кодировок, вы не сможете интерпретировать байты каким-либо образом; например Вы не могли разобрать слова и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...