Kotlin将长字符串字母转换为数字id

时间:2019-12-09 20:47:06

标签: algorithm kotlin

我正在尝试找到一种将长字符串ID(例如“ T2hR8VAR4tNULoglmIbpAbyvdRi1y02rBX”)转换为数字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个字母的字符串会产生大量数字,那么如何解决此问题?先感谢您。

2 个答案:

答案 0 :(得分:0)

如果您需要100%确信没有可能的重复项,并且输入字符串的长度最多为20个字符,则您不能将ID存储为64位长。您将必须使用BigInteger:

val id = BigInteger(stringId.toByteArray())

到那时,我质疑将ID转换为数字格式是否有任何意义。字符串本身可以是ID。

答案 1 :(得分:0)

您可以使用hashCode()功能。 "id".hashcode()。所有对象都实现此功能的变体。

来自documentation

  

open fun hashCode(): Int

     

返回对象的哈希码值。 hashCode的总合同为:

     

只要在同一个对象上多次调用它,hashCode方法就必须始终返回相同的整数,前提是在该对象的equals比较中使用的信息没有被修改。

     

如果根据equals()方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。

默认情况下,所有平台对象都将其实现。如果您有很多ID,总是有可能重复。

如果您使用基于JVM的kotlin环境,则哈希将由  String.hashCode() function来自JVM。