我需要根据包的名称生成一个一致的唯一Long。而不是使用"转换字符串为长"在Eclipse中,我认为我可以通过使用方法公共静态长的parseLong(字符串s,int基数)在运行时实现相同的任务?
我想我需要使用-
长。parseLong("Hazelnut", 36)返回1356099454469L
我从问题-如何在Java中转换字符串到长?
为什么在转换包含字符的字符串时需要将radix设置为36 ?
你基本上要把它当作一个以36为基数的数字。例如,字符串"012"意味着2 + 1 * 36 + 0 * 362。当你用完了数字,你就去找字母——所以"ABC"意味着12来自'C' + 11来自'B' * 36 + 10来自'A' * 362。
如果你了解十六进制的工作原理,除了使用拉丁字母中的所有字符之外,它是相同的。
对于0-9,A-Z, A-Z以外的字符串,它将失败——对于相当长的字符串,它也会失败;long
只能工作到263,您可以在基数36中相当快地通过。例如,"Hazelnut12345"失败。哦,这是不区分大小写的,所以"foo"的值与"foo"的值相同-这是否不符合您的唯一性要求?
基本上你只有264 long
值可以玩,所以除非你的包名是非常有限的,你不打算工作出一个唯一的映射