2017-05-21 21 views
0

我工作的一個多平臺的應用程序,我已經完成了數據庫和網絡版本。要查看網頁版我從數據庫中獲取哈希版本和比較兩個代碼。我用這個JavaScript代碼來哈希(我發現這對another question):複製的JavaScript哈希函數的Java /科特林

hashCode = function(s){ 
    return s.split("").reduce(function(a,b){a=((a<<5)-a)+b.charCodeAt(0);return a&a},0);    
} 

現在我需要做同樣的在我的Android應用程序,但我不知道如何使輸出相同的功能java或kotlin。有誰知道如何做到這一點或有其他跨平臺的香草解決方案?

在此先感謝。

編輯: 我對kotlin/java非常陌生,所以我只知道我能在網上找到什麼以及我對其他語言的瞭解。我試圖刪除儘可能多的錯誤,可能的,但有些事情我不知道,它仍然給錯誤:

fun go (a: Int, b: String): Int { 
    var a = ((a shl 5) - a) + Character.codePointAt(b,0); 
    return a and a 
} // this part doesn't give any errors now. 


fun hashCode(s: String): String { 
    return s.split("").reduce(go(a,b)) // I don't know what to pass as parameters + reduce gives an error 
} 
+1

當然是用Java編寫的簡單方法。你有什麼嘗試? (請不要把我們當「寫我的免費代碼」的服務!) –

+0

@StephenC我沒加我有什麼,因爲它可能是非常糟糕的代碼,它不工作。但我現在加了它。 –

回答

0

如果你關注與得到的散列碼,而不是複製JavaScript函數到科特林自己,我建議你可以使用這個班輪。

val s:String = "aaaa"; 
println(s.hashCode()); 

輸出爲2986048

我使用JavaScript版本檢查,這是一樣的。

這裏是科特林的documentation爲的hashCode

開放樂趣的hashCode():INT(源)

返回該對象的哈希碼值。 hashCode的一般合約是:

只要在同一個對象上多次調用hashCode方法,就必須一致地返回相同的整數,前提是修改對象的等號比較中沒有使用的信息。

如果兩個對象根據equals相等()方法,則調用每個兩個對象的hashCode方法必須產生相同的整數結果。

+0

Woah夥計,它的工作原理!是JavaScript版本,所以基本和常用科特林有它內置的hashCode()方法? –

+0

@RobinvanderNoord我認爲哈希函數是基本的,每種語言都應該有某種實現。儘管如此,在實現它之前檢查文檔總是更好:-) – Santosh