簡體   English   中英

Kotlin 將長字符串字母轉換為數字 id

[英]Kotlin Convert long String letters to a numerical id

我試圖找到一種方法將像“T2hR8VAR4tNULoglmIbpAbyvdRi1y02rBX”這樣的長字符串 ID 轉換為數字 ID。

我想過獲取每個數字的 ASCII 值,然后將它們相加,但我認為這不是一個好方法,因為不同的數字可能具有相同的結果,例如,“ABC”和“BAC”將具有相同的結果結果

A = 10,B = 20,C = 50,

ABC = 10 + 20 + 50 = 80

BAC = 20 + 10 + 50 = 80

我還想過獲取每個字母的 ASCII 代碼,然后將數字設置為彼此相鄰,例如“ABC”

所以 ABC = 102050

這種方法不起作用,因為有一個 20 個字母的字符串會導致一個巨大的數字,那么我該如何解決這個問題呢? 先感謝您。

您可以使用hashCode()函數。 "id".hashcode() 所有對象都實現了這個函數的一個變體。

文檔

open fun hashCode(): Int

返回對象的哈希碼值。 hashCode的總合約為:

每當在同一個對象上多次調用它時, hashCode方法必須始終返回相同的整數,前提是對象上的equals比較中使用的信息沒有被修改。

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

所有平台對象都默認實現它。 如果您有很多 ID,則總是有可能出現重復項。

如果您使用基於 JVM 的 kotlin 環境,則哈希將由 JVM 的String.hashCode()函數生成。

如果您需要 100% 確信沒有可能的重復項,並且輸入字符串最長可達 20 個字符,那么您不能將 ID 存儲在 64 位 Long 中。 您將不得不使用 BigInteger:

val id = BigInteger(stringId.toByteArray())

那時,我質疑將 ID 轉換為數字格式是否有任何意義。 字符串本身可以是 ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM