如何将非数字字符串转换为整数?
例如,我有:
String unique = "FUBAR";
有什么好的方法可以将该字符串表示为整数并且没有冲突,例如,“FUBAR”应始终表示为相同的数字,并且不应与任何其他字符串发生冲突。例如,String a =“A”;
应表示为整数1
,但是有什么方法可以实现这一点(最好适用于所有Unicode字符串,但在我的情况下ASCII值可能足够)。
如何将非数字字符串转换为整数?
例如,我有:
String unique = "FUBAR";
有什么好的方法可以将该字符串表示为整数并且没有冲突,例如,“FUBAR”应始终表示为相同的数字,并且不应与任何其他字符串发生冲突。例如,String a =“A”;
应表示为整数1
,但是有什么方法可以实现这一点(最好适用于所有Unicode字符串,但在我的情况下ASCII值可能足够)。
int idValue = (this.getClass().getName() + id).hashCode()
- Mark Reed你可以使用表格将字符串映射到唯一的 ID。通常情况下,没有一种通用的方法可以实现这一点。
final Map<String, Integer> map = new HashMap<>();
public int idFor(String s) {
Integer id = map.get(s);
if (id == null)
map.put(s, id = map.size());
return id;
}
number n;
for each letter in string
n = 256 * n + (letter's position in character set)
private BigDecimal createBigDecimalFromString(String data)
{
BigDecimal value = BigDecimal.ZERO;
try
{
byte[] tmp = data.getBytes("UTF-8");
int numBytes = tmp.length;
for(int i = numBytes - 1; i >= 0; i--)
{
BigDecimal exponent = new BigDecimal(256).pow(i);
value = value.add(exponent.multiply(new BigDecimal(tmp[i])));
}
}
catch (UnsupportedEncodingException e)
{
}
return value;
}
public static BigInteger getNumberId(final String value) {
return new BigInteger(value.getBytes(Charset.availableCharsets().get("UTF-8")));
}
无论接受何种答案,都可以通过计算字符串的哥德尔数将任何字符串表示为整数,该数是每个可能的字符串的质数唯一乘积。话虽如此,实现起来相当不切实际和缓慢,对于大多数字符串而言,您需要使用BigInteger而不是普通的整数,并且要将哥德尔数解码为相应的字符串,您需要拥有定义好的字符集。
int
值,那么你需要一个哈希函数,其中有很多。然而,永远不可能有一个完美的哈希函数保证没有冲突,因为可能的字符串比ints还要多(鸽笼原理)。 - Mark Reedint
。但是如果你找到了可靠的方法,请回来报价:数据压缩公司会爱上你的;-) - Sergey Kalinichenkoint
还是指“任意长度的整数”? - Bohemian