Java的UUID类生成随机UUID。但这包括字母和数字。对于某些应用,我们只需要数字。有没有办法生成只包含Java中的数字的随机UUID?
UUID.randomUUID();
答案 0 :(得分:16)
如果您不想要随机数,但只使用数字的UUID:
String lUUID = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));
在这种情况下,左边填充为40个零......
结果:
UUID:b55081fa-9cd1-48c2-95d4-efe2db322a54
在:
UUID:0241008287272164729465721528295504357972
答案 1 :(得分:6)
为什么不只生成Random
数字并将其设置为您想要的格式?
这不会为您提供开箱即用的独特性。 (即你必须对每一代进行检查并重试逻辑)
其他采用UUID位并将其转换为数字的解决方案在唯一性方面将更加细化。根据您的用例,您可能仍希望使用此方法检查唯一性。
答案 2 :(得分:5)
虽然这个问题的原始海报将@Jigar Joshi的问题标记为最佳答案,但我想补充一点,在某些情况下使用UUID而不是随机数是有理由的。不同之处在于UUID(通用)是唯一的(因此名称),而随机数则不是。这只是一个概率问题,在生成随机数时是否会获得相同的数字两次甚至更多,但UUID不会发生这种情况。因此,我认为@Chris Eibl的答案是最好的答案。
答案 3 :(得分:3)
记录:UUID实际上是128位数字。
您看到的字母数字字符串是使用十六进制数字(0..9A..F)表示该128位数字。
真正的解决方案是将字符串转换为对应的128位数字。并存储你需要两个Longs(Long有64位)。
答案 4 :(得分:2)
UUID uuid = UUID.randomUUID();
String numericUUID = Long.toString(uuid.getMostSignificantBits())
+ Long.toString(uuid.getLeastSignificantBits());
答案 5 :(得分:1)
如果您不需要UUID,为什么要使用UUID类?听起来更像是你需要一个随机数,这可以通过使用java.util.Random
类来实现。
答案 6 :(得分:-1)
setContentView(R.layout.activity_show_second);
textView = (TextView)findViewById(R.id.textViewdata);
textView.setText(message);
并非普遍独特。如果你想使用Random
而不是其他人建议的Random
类,你可以简单地使用正则表达式去除UUID中除数字之外的所有内容。试试这样的事情,
UUIDs
答案 7 :(得分:-1)
最简单的方法:
uuid.uuid4().int
答案 8 :(得分:-3)
在UUID上调用hashCode()
以获取唯一的整数。
答案 9 :(得分:-5)
String uuid = UUID.randomUUID()。toString()。replaceAll(“ - ”,“”); // strips' - '