Java 是否与 C++ string_view 等价?
Does Java have any equivalent to C++ string_view?
Java 有 StringBuilder 用于生成增长的字符串,但不幸的是大多数 API 使用 String 所以一切都需要转换和伴随的复制开销。
在编译器上,假设有一个char数组。是否有 class 可以提供只读的 StringView(如 C++17 string_view)?如果不是,我可以很容易地写成 class,但问题是因为其他一切都处理字符串,一些好处会丢失。这个想法是提供一些看起来像字符串的东西,其中构造函数只是:
StringView(char[] bigBuffer, int start, int len) {}
并在任何需要使用字符串的地方使用 class。
有String
-like data. It's called CharSequence
的只读访问接口,String
class实现了这个接口。
Java相当于C++中的StringView
,是CharBuffer
, which also implements CharSequence
, so any method that accepts a CharSequence
can be called with a String
or a CharBuffer
(or a StringBuilder
).
许多 Java API 已经接受 CharSequence
而不是 String
,例如java.time
包中的所有 parse()
方法,以及 Java 的正则表达式 API.
要以类似于 StringView
构造函数的工作方式创建 CharBuffer
,请调用 wrap()
:
CharBuffer.wrap(char[] array, int offset, int length)
The new buffer will be backed by the given char array; that is, modifications to the buffer will cause the array to be modified and vice versa.
那个 javadoc 显示没有复制正在进行。
Java 有 StringBuilder 用于生成增长的字符串,但不幸的是大多数 API 使用 String 所以一切都需要转换和伴随的复制开销。
在编译器上,假设有一个char数组。是否有 class 可以提供只读的 StringView(如 C++17 string_view)?如果不是,我可以很容易地写成 class,但问题是因为其他一切都处理字符串,一些好处会丢失。这个想法是提供一些看起来像字符串的东西,其中构造函数只是:
StringView(char[] bigBuffer, int start, int len) {}
并在任何需要使用字符串的地方使用 class。
有String
-like data. It's called CharSequence
的只读访问接口,String
class实现了这个接口。
Java相当于C++中的StringView
,是CharBuffer
, which also implements CharSequence
, so any method that accepts a CharSequence
can be called with a String
or a CharBuffer
(or a StringBuilder
).
许多 Java API 已经接受 CharSequence
而不是 String
,例如java.time
包中的所有 parse()
方法,以及 Java 的正则表达式 API.
要以类似于 StringView
构造函数的工作方式创建 CharBuffer
,请调用 wrap()
:
CharBuffer.wrap(char[] array, int offset, int length)
The new buffer will be backed by the given char array; that is, modifications to the buffer will cause the array to be modified and vice versa.
那个 javadoc 显示没有复制正在进行。