Java 有相当于 C++ string_view 的东西吗?

问题描述 投票:0回答:1

Java 有 StringBuilder 用于生成不断增长的字符串,但不幸的是,大多数 API 使用 String,因此一切都需要转换,并伴随着复制开销。

在编译器上,假设有一个 char 数组。是否有任何类可以提供只读 StringView (如 C++17 string_view)?如果没有,我可以轻松地编写诸如类之类的内容,但问题是由于其他所有内容都处理字符串,因此会失去一些好处。 这个想法是提供一些看起来像字符串的东西,其中构造函数只是:

StringView(char[] bigBuffer, int start, int len) {}

并在任何需要使用字符串的地方使用该类。

java string performance immutability
1个回答
10
投票

有一个用于只读访问

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 显示没有进行任何复制。

© www.soinside.com 2019 - 2024. All rights reserved.