string - drop,dropRight,take,takeRight vs 子字符串?

标签 string scala

我在学习 Scala来自 Scala for the Impatient和第01章练习有问题

  1. What do the take, drop, takeRight, and dropRight string functions do? What advantage or disadvantage do they have over using substring?


我看到的唯一优势是drop (和口味)不会扔IndexOutOfBoundsException
例如:
scala> "Hello World!" dropRight 100
res26: String = ""

scala> "Hello World!" substring 100
java.lang.StringIndexOutOfBoundsException: String index out of range: -88
  at java.lang.String.substring(String.java:1919)
  ... 33 elided

还有什么?内存效率?

最佳答案

主要好处是它允许您将 String 视为字符的顺序集合,就像任何其他 Seq 或 List 实例一样。

事实上,这些方法(以及其他重要的转换函数,如 map、flatMap 和 filter)并不是在 String 本身中实现的(实际上,它只是 Java String 类,而不是原生 Scala 类),而是在 StringOps 类中(它扩展了 StringLike -> ... -> SeqLike),并且隐式转换可确保在您需要访问这些方法时将 String 转换为 StringOps。

这意味着您可以将字符串传递给列表操作函数,该函数将接收一个 StringOps 实例,像处理任何其他 SeqLike 实体一样对其进行处理,而无需知道它实际上是一个字符串,并返回操作的结果,即StringOps 旨在以字符串的形式呈现给您。

如果您知道给定代码段中的实体是字符串,请随意使用特定于字符串的方法,但是这种隐式转换的可用性意味着您还可以利用字符串的“字符序列”性质来在方便的情况下,像对待任何其他列表一样对待它。

关于string - drop,dropRight,take,takeRight vs 子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31711837/

相关文章:

javascript - 接收 var 声明字符串,只保存值

sql - 在 Sybase SQL 中连接简单字符串的意外结果

c++ - 用一些字符串替换字符串中的字符

斯卡拉函数指针

scala - 如何从 Scala 中的数组/列表中找到后续数字的差异?

c - 用于转义字符串的标准 C 库

javascript - 将 JavaScript 中的大字符串与散列进行比较

scala - Spark内存问题

json - 使用 Scala 的 Circe 编码为 json 时忽略无字段

scala - flatMap 和 filter 的组合是什么?