当前位置: 首页 > 知识库问答 >
问题:

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

淳于坚壁
2023-03-14

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

更新:

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

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;
}

共有1个答案

公羊喜
2023-03-14

您不能从足够长的字符串生成完全唯一的ints,因为10个字符的字符串比32位整数多。

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

 类似资料:
  • 问题内容: 所以我可以这样做: 但是我找不到办法。我想做类似的事情: 这也不起作用: 问题答案: Swift 2.0 您可以使用构造函数初始化Integer

  • 问题内容: 我正在从AWS解析一个cron字符串,看起来像这样。有没有一种干净的方法可以追溯到使用Go的内置类型?该类型允许映射到,但似乎没有办法进行相反的操作。我想念什么吗?现在,我已经写了这个得到我使用这样的:。 问题答案: 前言: 我在中发布了此实用程序,请参见。 这是目前最好的方法。 最好的方法是使用包级变量,并且仅填充一次地图。 通过这种方式进行人口调查更加干净和安全: 测试它: 输出(

  • 问题内容: 有没有更好的方法来压缩此方法,即通过避免切换情况来降低圈复杂度? 问题答案: 尝试: 另外,您可以使用SimpleDateFormat: (要使用第二个选项,您必须在对象中添加日期和月份)。

  • 我在从字符串数组中获取唯一字母和数字,然后返回它们时遇到问题。我遇到了格式问题。 给定的输入是:([abc,123,efg]),应该返回abcefg123 然而,矿山回报:abc123efg 我怎样才能解决这个问题? 到目前为止,我的方法是: }

  • 问题内容: 我在JavaScript中有一个字符串,例如“#box2”,我只想从中获得“ 2”。 尝试过: 它仍然在警报中返回#box2,我该如何使其正常工作? 它需要容纳末尾附加的任何长度的数字。 问题答案: 对于此特定示例, 在一般情况下: 由于这个答案由于某种原因而受到欢迎,因此有一个好处:正则表达式生成器。

  • 问题内容: 我有一个String变量(基本上是一个英语句子,带有未指定数量的数字),我想将所有数字提取到一个整数数组中。我想知道是否有使用正则表达式的快速解决方案? 我使用了Sean的解决方案,并对其进行了一些更改: 问题答案: …打印和。 -?匹配前导负号-可选。 d匹配一个数字,但是我们需要像Java String中那样编写。因此, d +匹配1个或多个数字。