Char或String – > Scala中的Unicode值?
发布时间:2020-12-16 09:41:44 所属栏目:安全 来源:网络整理
导读:所以我正在通过“不耐烦的Scala”中的几个练习,其中之一是: 编写for循环来计算字符串中所有字母的Unicode代码的乘积。例如,“Hello”中的字符的产品是9415087488 L. 下一个问题是做同样的事情,但没有for循环 – 它提示我们应该检查Scaladoc中的StringOps
所以我正在通过“不耐烦的Scala”中的几个练习,其中之一是:
编写for循环来计算字符串中所有字母的Unicode代码的乘积。例如,“Hello”中的字符的产品是9415087488 L. 下一个问题是做同样的事情,但没有for循环 – 它提示我们应该检查Scaladoc中的StringOps。 我检查了Scaladoc中的RichChar和StringOps部分,也许我在错误的地方误读或查找错误的地方,但是找不到任何让我匹配输出的东西。我已经尝试过: scala> x.foldLeft(1)(_ * _.toInt) res0: Int = 825152896 scala> x.foldLeft(1)(_ * _.getNumericValue) res5: Int = 2518992 scala> x.foldLeft(1)(_ * _.intValue()) res6: Int = 825152896 scala> var x = 1 x: Int = 1 scala> for (c <- "Hello") x *= c.toInt scala> x res12: Int = 825152896 哪个不符合他们的输出。 我该如何做到这一点,无论是为了还是不用的方式? 谢谢! 解决方法
当你做x.foldLeft(1)(_ * _.toInt)时,结果类型将被推断为Int,但是9415087488对于Int来说是太大了。
所以你需要告诉Scala使用Long来存储它。 scala> val x = "Hello" x: java.lang.String = Hello scala> x.foldLeft(1L)(_ * _.toInt) res1: Long = 9415087488 scala> var x: Long = 1 x: Long = 1 scala> for (c <- "Hello") x *= c.toInt scala> x res7: Long = 9415087488 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |