drop,dropRight,take,takeRight vs substring?

day*_*mer 11 string scala

我正在学习Scala斯卡拉不耐烦和01章练习有问题

  1. take,drop,takeRight和dropRight字符串函数有什么作用?他们使用子串有什么优势或劣势?

我看到的唯一优势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
Run Code Online (Sandbox Code Playgroud)

还有什么?内存效率高?

Sha*_*nds 18

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

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

这意味着你可以将一个String传递给一个列表操作函数,该函数将接收一个StringOps实例,像任何其他SeqLike实体一样处理它,而不需要知道它实际上是一个String,并且交回操作的结果, StringOps旨在以String形式呈现给您.

如果您知道某个实体是给定代码段中的String,请随意使用特定于String的方法,但此隐式转换的可用性意味着您还可以利用String的"字符序列"类似性质来实现在可能方便的情况下将其视为任何其他列表.


Aiv*_*ean 5

看来你是对的。所有这些操作都使用StringOps.slice方法,该String.substring方法委托给方法。

因此,除了包装字符串和执行边界验证的开销外,它与的调用相同substring