String转Long,以及转化后在值比较时的问题

博客介绍了Java里String转化为Long的两种方式,即Long.valueOf(String)和Long.parseLong(String),前者转成封装类型,后者转成基本类型。还指出封装类型与基本类型比较易出错,并给出三种可行的比较方法,如用Long.equals()等。

通常String转化为Long有两种方式

Long.valueOf(String);

Long.parseLong(String);

这两种方法,第一种是把String转化为Long的封装类型

而第二种方法是将String转化为long,也就是基本类型

所以如果你使用第一种方法将String转化成了Long的封装类型,然后和一个基本类型的long进行比较的话,即使显示的值相同,依然不会显示比较成功。因为Long事实上是一个对象,所以如果我们想要进行比较的话,可以采用以下方法。

1、Long.equals()

2、都使用Long.parseLong(String);

3、使用Long.valueOf(String).longValue()

 

以下是几种将 `string` 转化为 `long` 类型 hash 的方法: #### 自定义哈希函数 可以通过遍历字符串的每个字符,使用一个基准 `base` 来计算哈希。示例代码如下: ```python def string_to_long_hash(P, base=31): hash_value = 0 for char in P: hash_value = hash_value * base + ord(char) return hash_value # 示例使用 string = "example" hash_value = string_to_long_hash(string) print(hash_value) ``` 此方法的思想类似于引用 [3] 中的哈希函数,通过不断累积字符的 ASCII 并乘以基准来得到一个长整型的哈希。 #### Java 中的哈希计算 在 Java 中,可以利用 `String` 类的 `hashCode()` 方法得到一个 `int` 类型的哈希,然后将其换为 `long` 类型。示例代码如下: ```java public class StringToLongHash { public static void main(String[] args) { String str = "example"; long hashValue = (long) str.hashCode(); System.out.println(hashValue); } } ``` #### 字符串哈希进阶方法 在字符串哈希进阶中,也有将字符串转化为数字(可作为哈希)的方法。例如引用 [4] 中提到的一系列函数,可用于计算字符串不同子串的哈希。以下是一个简单示例: ```python # 假设已经实现了相关函数 class StringHash: def __init__(self, base=31): self.base = base self.powP = [] self.H = [] def init_powP(self, len): # 计算 powP[] 的 self.powP = [1] for i in range(1, len): self.powP.append(self.powP[i - 1] * self.base) def hashfunc(self, str): # 计算 H[i] 的 self.H = [0] * (len(str) + 1) for i in range(1, len(str) + 1): self.H[i] = self.H[i - 1] * self.base + ord(str[i - 1]) def str_sub_hash(self, i, j): # 计算 H[i...j] 的 return self.H[j + 1] - self.H[i] * self.powP[j - i + 1] # 使用示例 str = "example" sh = StringHash() sh.init_powP(len(str)) sh.hashfunc(str) hash_value = sh.str_sub_hash(0, len(str) - 1) print(hash_value) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值