scala中是否有子串代理?

时间:2011-09-16 11:13:49

标签: scala

将字符串用作String对象对于许多字符串处理任务非常方便。

我需要提取一些子串来处理和scala String类为我提供这样的功能。但它相当昂贵:每次使用子字符串函数时都会创建新的String对象。使用元组(string:String,start:Int,stop:Int)可以解决性能问题,但会使代码变得复杂。

是否有用于创建字符串代理的库,它存储原始字符串,范围限制并与其他字符串函数兼容?

2 个答案:

答案 0 :(得分:10)

Java 7u6及更高版本现在将#substring实现为副本,而不是视图,使得此答案过时。


如果您在Sun / Oracle JVM上运行Scala程序,则不需要执行此优化,因为java.lang.String已经为您执行此操作。

字符串存储为char数组的引用,以及偏移量和长度。子串共享相同的底层数组,但具有不同的偏移和/或长度。

答案 1 :(得分:5)

查看the implementation of String(特别是substring(int beginIndex, int endIndex)):它已按您的意愿展示。