繁体   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