从字符串中获取唯一的整数值

Posted

技术标签:

【中文标题】从字符串中获取唯一的整数值【英文标题】:Get unique integer value from string 【发布时间】:2013-07-09 03:29:49 【问题描述】:

我有相同格式的不同唯一字符串。字符串看起来像这样axf25!j&809>-11~dc,我想从这个字符串中获取唯一的整数值。 每次这个值都必须相同,并且取决于字符串。我尝试将字符串的每个 char 转换为 int,然后将 char 相加。但如果我有 2 个具有相同符号集的字符串,它会返回彼此相等的整数值。所以不适合我。如何从唯一字符串生成唯一整数值​​?

更新:

考虑了所有给定的解决方案后,我决定创建生成唯一整数值​​的函数。我希望它排除碰撞。

public int getUniqueInteger(String name)
    String plaintext = name;
    int hash = name.hashCode();
    MessageDigest m;
    try 
        m = MessageDigest.getInstance("MD5");
        m.reset();
        m.update(plaintext.getBytes());
        byte[] digest = m.digest();
        BigInteger bigInt = new BigInteger(1,digest);
        String hashtext = bigInt.toString(10);
        // Now we need to zero pad it if you actually want the full 32 chars.
        while(hashtext.length() < 32 )
          hashtext = "0"+hashtext;
        
        int temp = 0;
        for(int i =0; i<hashtext.length();i++)
            char c = hashtext.charAt(i);
            temp+=(int)c;
        
        return hash+temp;
     catch (NoSuchAlgorithmException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    return hash;

【问题讨论】:

为什么不使用getBytes 将每个字符转换成对应的ASCII?然后把这些加起来。 使用String#hashCode()? hashCode 不保证唯一性! @DevlshOne 这不区分“aabc”和“cbaa” 【参考方案1】:

你可以用代码试试:

import java.math.BigInteger;

public static BigInteger stringToBigInteger(String text) 
    BigInteger bigInt = new BigInteger(text.getBytes());
    return bigInt;

谢谢。

【讨论】:

与 String 相比,它的内存消耗是多少?【参考方案2】:

您可以只使用String.hashCode()(例如mystring.hashCode())为您提供一定程度的独特性,但您必须确保您可以处理冲突。

【讨论】:

【参考方案3】:

您不能从足够长的字符串because there are more 10-character strings than 32-bit integers 生成完全唯一的ints。

就非唯一的解决方案而言,您可以使用标准的hashCode 函数,它在Java 中的实现相当不错。对于更复杂的东西,您可以考虑计算加密哈希(SHA-2、MD5 等)

【讨论】:

@Nolesh 没有解决方案。【参考方案4】:

将字符串视为某个整数的基数 0x110000 表示(如果您知道字符范围有限,则可以使用较小的基数)。转换为BigInteger

【讨论】:

【参考方案5】:

您不能保证来自不同字符串的唯一整数值​​,因为可能的字符串表示形式比整数多。您可以使用一些众所周知的/定义的散列算法来最大程度地减少冲突的机会。您应该查看 MD5 或 SHA。

java 类MessageDigest 应该有点用处。

【讨论】:

不清楚如何获取整数值,因为函数返回一个字节数组

以上是关于从字符串中获取唯一的整数值的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将唯一字符串转换为唯一整数值

MySQL 如何从 varchar 列中获取精确的整数值

如何从字节中获取子位作为单独的整数值?

如何在颤动中将十六进制颜色代码解析为它们各自的整数值

javascript中如何将获得的整型数值转换为字节数组

如何在 SQL Server 中生成唯一递增的整数值?