将字符串用作String对象对于许多字符串处理任务非常方便。
我需要提取一些子串来处理和scala String类为我提供这样的功能。但它相当昂贵:每次使用子字符串函数时都会创建新的String对象。使用元组(string:String,start:Int,stop:Int)可以解决性能问题,但会使代码变得复杂。
是否有用于创建字符串代理的库,它存储原始字符串,范围限制并与其他字符串函数兼容?
答案 0 :(得分:10)
Java 7u6及更高版本现在将#substring
实现为副本,而不是视图,使得此答案过时。
如果您在Sun / Oracle JVM上运行Scala程序,则不需要执行此优化,因为java.lang.String
已经为您执行此操作。
字符串存储为char
数组的引用,以及偏移量和长度。子串共享相同的底层数组,但具有不同的偏移和/或长度。
答案 1 :(得分:5)
查看the implementation of String
(特别是substring(int beginIndex, int endIndex)
):它已按您的意愿展示。