加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读