php ve java aynı dize karşılaştırma işlevi gerekir

2 Cevap java

Ben php ve java arasında hareket dizeleri listesini sıralamış. Bu veriler üzerinde bsearch edebilmek için, ben aynı karşılaştırma işlev gerekir.

Bunu kullanabilir fonksiyonlarını karşılaştırın ne dize herhangi bir fikir, her zaman hem de aynı sonucu verecek? örneğin PHP'nin Strcmp () java String.compareTo vs ()

evet ben kendi dize dikkatlice karakter tarafından simsiyah gelmez karşılaştırma yapmak, biliyorum, ama ben basit bir cevabı var umuyordum.

PS, umurumda değil harfe duyarlı veya değil, sürece tutarlı olduğu gibi.

2 Cevap

Bu durumda php kod yavaş olmasına izin beri, benim kendi haddeleme sona erdi ...

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;
}

Bunu yapmanın bir diğer yolu compareTo yöntemi ile tam Java, kendi 'bayt dize' sınıfı uygulamak olacaktır. Fikir Unicode karakterleri içine (UTF8 kodlaması, ya da ne olursa olsun) bayt temsillerini dönüştürme ve böylece yanlış karakter kodlaması kullanılarak olasılığını kaçınarak önlemek olacaktır.

Java'nın metin işleme API'leri tüm String türüne dayanmaktadır ve bu nedenle Unicode (veya daha az) dayanır çünkü Ama bu, son derece zor olurdu. Eğer karakter setleri veya kodlamaları hakkında herhangi bir varsayım yapmıyor olsaydı Ayrıca, herhangi bir şekilde bayt yorumlamak mümkün olmaz; örneğin vb, kelimeleri ayrıştırmak değil