我有一个String
变量,我想将其转换为long
变量。
问题是String变量永远不会包含任何数字,因此只需调用Long.parseLong(myString);
就会抛出NumberFormatException
。
澄清我的意图:
我有一个从long
in-parameter返回String
的方法。我希望该方法基于String
变量生成ID,以便稍后能够对long
值进行分组。
我可以使用RegEx表达式来解决这个问题,但我的问题是,是否有任何直接的方法来获得long
的{{1}}值?
答案 0 :(得分:2)
您说您想要long
值。内置的hashCode()
会返回int
,而不是long
。如果确实需要long
,则需要使用返回long
的散列方法。有许多可能性,但我通常建议FNV哈希用于非加密目的。它非常容易编码,并且有各种尺寸,包括64位。
ETA:FNV哈希的代码位于我链接到的FNV网站上。需要注意的是1)无符号v。带符号的64位数字和2)字符编码。
long FNV64Hash(String inString) throws UnsupportedEncodingException {
// FNV-64 constants.
long FNVprime = 1099511628211L;
// Needs workround for unsigned 64-bit: 14695981039346656037.
long FNVbasis = (146959810393466560L * 100L) + 37L;
// Alternative: long FNVbasis = -3750763034362895579L;
// Convert string to bytes.
byte[] bytes = inString.getBytes("UTF-8"); // Specify a character encoding.
long hash = FNVbasis;
for (byte aByte : bytes) {
hash ^= aByte;
hash *= FNVbasis;
}
return hash;
} // end FNV64Hash()
答案 1 :(得分:-1)
如果你想要一种简单易用的方法,你可以在java中使用hashCode(),这是一个例子
import java.io.*;
public class StringHashing{
public static void main(String args[]){
String Str = new String("HELLO WORLD !!");
System.out.println("Hashcode for Str :" + Str.hashCode() );
}
}
或者您可以实现自己的哈希函数