Java 有 StringBuilder 用于生成不断增长的字符串,但不幸的是,大多数 API 使用 String,因此一切都需要转换,并伴随着复制开销。
在编译器上,假设有一个 char 数组。是否有任何类可以提供只读 StringView (如 C++17 string_view)?如果没有,我可以轻松地编写诸如类之类的内容,但问题是由于其他所有内容都处理字符串,因此会失去一些好处。 这个想法是提供一些看起来像字符串的东西,其中构造函数只是:
StringView(char[] bigBuffer, int start, int len) {}
并在任何需要使用字符串的地方使用该类。
String
类数据的接口。它被称为 CharSequence
,并且 String
类实现了这个接口。
Java 相当于 C++
string_view
,是一个 CharBuffer
,它也实现了 CharSequence
,因此任何接受 CharSequence
的方法都可以使用 String
或 CharBuffer
(或一个StringBuilder
)。
许多 Java API 已经接受
CharSequence
而不是 String
,例如parse()
包中的所有java.time
方法,以及Java的正则表达式API。
要以与
CharBuffer
构造函数类似的方式创建 StringView
,请调用 wrap()
:
CharBuffer.wrap(char[] array, int offset, int length)
新的缓冲区将由给定的字符数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。
javadoc 显示没有进行任何复制。