crates/sui-framework/docs/std/string.md
The <code><a href="../std/string.md#std_string">string</a></code> module defines the <code><a href="../std/string.md#std_string_String">String</a></code> type which represents UTF8 encoded strings.
Stringutf8from_asciito_asciitry_utf8as_bytesinto_bytesis_emptylengthappendappend_utf8insertsubstringindex_ofinternal_check_utf8internal_is_char_boundaryinternal_sub_stringinternal_index_ofbytessub_string<a name="std_string_String"></a>
StringA <code><a href="../std/string.md#std_string_String">String</a></code> holds a sequence of bytes which is guaranteed to be in utf8 format.
<pre><code><b>public</b> <b>struct</b> <a href="../std/string.md#std_string_String">String</a> <b>has</b> <b>copy</b>, drop, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code><a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>></code> </dt> <dd> </dd> </dl> </details><a name="@Constants_0"></a>
<a name="std_string_EInvalidUTF8"></a>
An invalid UTF8 encoding.
<pre><code><b>const</b> <a href="../std/string.md#std_string_EInvalidUTF8">EInvalidUTF8</a>: <a href="../std/u64.md#std_u64">u64</a> = 1; </code></pre><a name="std_string_EInvalidIndex"></a>
Index out of range.
<pre><code><b>const</b> <a href="../std/string.md#std_string_EInvalidIndex">EInvalidIndex</a>: <a href="../std/u64.md#std_u64">u64</a> = 2; </code></pre><a name="std_string_utf8"></a>
utf8Creates a new string from a sequence of bytes. Aborts if the bytes do not represent valid utf8.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_utf8">utf8</a>(<a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>>): <a href="../std/string.md#std_string_String">std::string::String</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_utf8">utf8</a>(<a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>>): <a href="../std/string.md#std_string_String">String</a> { <b>assert</b>!(<a href="../std/string.md#std_string_internal_check_utf8">internal_check_utf8</a>(&<a href="../std/string.md#std_string_bytes">bytes</a>), <a href="../std/string.md#std_string_EInvalidUTF8">EInvalidUTF8</a>); <a href="../std/string.md#std_string_String">String</a> { <a href="../std/string.md#std_string_bytes">bytes</a> } } </code></pre> </details><a name="std_string_from_ascii"></a>
from_asciiConvert an ASCII string to a UTF8 string
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_from_ascii">from_ascii</a>(s: <a href="../std/ascii.md#std_ascii_String">std::ascii::String</a>): <a href="../std/string.md#std_string_String">std::string::String</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_from_ascii">from_ascii</a>(s: <a href="../std/ascii.md#std_ascii_String">ascii::String</a>): <a href="../std/string.md#std_string_String">String</a> { <a href="../std/string.md#std_string_String">String</a> { <a href="../std/string.md#std_string_bytes">bytes</a>: s.<a href="../std/string.md#std_string_into_bytes">into_bytes</a>() } } </code></pre> </details><a name="std_string_to_ascii"></a>
to_asciiConvert an UTF8 string to an ASCII string. Aborts if <code>s</code> is not valid ASCII
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_to_ascii">to_ascii</a>(s: <a href="../std/string.md#std_string_String">std::string::String</a>): <a href="../std/ascii.md#std_ascii_String">std::ascii::String</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_to_ascii">to_ascii</a>(s: <a href="../std/string.md#std_string_String">String</a>): <a href="../std/ascii.md#std_ascii_String">ascii::String</a> { <b>let</b> <a href="../std/string.md#std_string_String">String</a> { <a href="../std/string.md#std_string_bytes">bytes</a> } = s; <a href="../std/string.md#std_string_bytes">bytes</a>.to_ascii_string() } </code></pre> </details><a name="std_string_try_utf8"></a>
try_utf8Tries to create a new string from a sequence of bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_try_utf8">try_utf8</a>(<a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>>): <a href="../std/option.md#std_option_Option">std::option::Option</a><<a href="../std/string.md#std_string_String">std::string::String</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_try_utf8">try_utf8</a>(<a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>>): Option<<a href="../std/string.md#std_string_String">String</a>> { <b>if</b> (<a href="../std/string.md#std_string_internal_check_utf8">internal_check_utf8</a>(&<a href="../std/string.md#std_string_bytes">bytes</a>)) <a href="../std/option.md#std_option_some">option::some</a>(<a href="../std/string.md#std_string_String">String</a> { <a href="../std/string.md#std_string_bytes">bytes</a> }) <b>else</b> <a href="../std/option.md#std_option_none">option::none</a>() } </code></pre> </details><a name="std_string_as_bytes"></a>
as_bytesReturns a reference to the underlying byte vector.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_as_bytes">as_bytes</a>(s: &<a href="../std/string.md#std_string_String">std::string::String</a>): &<a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_as_bytes">as_bytes</a>(s: &<a href="../std/string.md#std_string_String">String</a>): &<a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>> { &s.<a href="../std/string.md#std_string_bytes">bytes</a> } </code></pre> </details><a name="std_string_into_bytes"></a>
into_bytesUnpack the <code><a href="../std/string.md#std_string">string</a></code> to get its underlying bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_into_bytes">into_bytes</a>(s: <a href="../std/string.md#std_string_String">std::string::String</a>): <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_into_bytes">into_bytes</a>(s: <a href="../std/string.md#std_string_String">String</a>): <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>> { <b>let</b> <a href="../std/string.md#std_string_String">String</a> { <a href="../std/string.md#std_string_bytes">bytes</a> } = s; <a href="../std/string.md#std_string_bytes">bytes</a> } </code></pre> </details><a name="std_string_is_empty"></a>
is_emptyChecks whether this string is empty.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_is_empty">is_empty</a>(s: &<a href="../std/string.md#std_string_String">std::string::String</a>): <a href="../std/bool.md#std_bool">bool</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_is_empty">is_empty</a>(s: &<a href="../std/string.md#std_string_String">String</a>): <a href="../std/bool.md#std_bool">bool</a> { s.<a href="../std/string.md#std_string_bytes">bytes</a>.<a href="../std/string.md#std_string_is_empty">is_empty</a>() } </code></pre> </details><a name="std_string_length"></a>
lengthReturns the length of this string, in bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_length">length</a>(s: &<a href="../std/string.md#std_string_String">std::string::String</a>): <a href="../std/u64.md#std_u64">u64</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_length">length</a>(s: &<a href="../std/string.md#std_string_String">String</a>): <a href="../std/u64.md#std_u64">u64</a> { s.<a href="../std/string.md#std_string_bytes">bytes</a>.<a href="../std/string.md#std_string_length">length</a>() } </code></pre> </details><a name="std_string_append"></a>
appendAppends a string.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_append">append</a>(s: &<b>mut</b> <a href="../std/string.md#std_string_String">std::string::String</a>, r: <a href="../std/string.md#std_string_String">std::string::String</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_append">append</a>(s: &<b>mut</b> <a href="../std/string.md#std_string_String">String</a>, r: <a href="../std/string.md#std_string_String">String</a>) { s.<a href="../std/string.md#std_string_bytes">bytes</a>.<a href="../std/string.md#std_string_append">append</a>(r.<a href="../std/string.md#std_string_bytes">bytes</a>) } </code></pre> </details><a name="std_string_append_utf8"></a>
append_utf8Appends bytes which must be in valid utf8 format.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_append_utf8">append_utf8</a>(s: &<b>mut</b> <a href="../std/string.md#std_string_String">std::string::String</a>, <a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_append_utf8">append_utf8</a>(s: &<b>mut</b> <a href="../std/string.md#std_string_String">String</a>, <a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/vector.md#std_vector">vector</a><<a href="../std/u8.md#std_u8">u8</a>>) { s.<a href="../std/string.md#std_string_append">append</a>(<a href="../std/string.md#std_string_utf8">utf8</a>(<a href="../std/string.md#std_string_bytes">bytes</a>)) } </code></pre> </details><a name="std_string_insert"></a>
insertInsert the other string at the byte index in given string. The index must be at a valid utf8 char boundary.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_insert">insert</a>(s: &<b>mut</b> <a href="../std/string.md#std_string_String">std::string::String</a>, at: <a href="../std/u64.md#std_u64">u64</a>, o: <a href="../std/string.md#std_string_String">std::string::String</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_insert">insert</a>(s: &<b>mut</b> <a href="../std/string.md#std_string_String">String</a>, at: <a href="../std/u64.md#std_u64">u64</a>, o: <a href="../std/string.md#std_string_String">String</a>) { <b>let</b> <a href="../std/string.md#std_string_bytes">bytes</a> = &s.<a href="../std/string.md#std_string_bytes">bytes</a>; <b>assert</b>!(at <= <a href="../std/string.md#std_string_bytes">bytes</a>.<a href="../std/string.md#std_string_length">length</a>() && <a href="../std/string.md#std_string_internal_is_char_boundary">internal_is_char_boundary</a>(<a href="../std/string.md#std_string_bytes">bytes</a>, at), <a href="../std/string.md#std_string_EInvalidIndex">EInvalidIndex</a>); <b>let</b> l = s.<a href="../std/string.md#std_string_length">length</a>(); <b>let</b> <b>mut</b> front = s.<a href="../std/string.md#std_string_substring">substring</a>(0, at); <b>let</b> end = s.<a href="../std/string.md#std_string_substring">substring</a>(at, l); front.<a href="../std/string.md#std_string_append">append</a>(o); front.<a href="../std/string.md#std_string_append">append</a>(end); *s = front; } </code></pre> </details><a name="std_string_substring"></a>
substringReturns a sub-string using the given byte indices, where <code>i</code> is the first byte position and <code>j</code> is the start of the first byte not included (or the length of the string). The indices must be at valid utf8 char boundaries, guaranteeing that the result is valid utf8.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_substring">substring</a>(s: &<a href="../std/string.md#std_string_String">std::string::String</a>, i: <a href="../std/u64.md#std_u64">u64</a>, j: <a href="../std/u64.md#std_u64">u64</a>): <a href="../std/string.md#std_string_String">std::string::String</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_substring">substring</a>(s: &<a href="../std/string.md#std_string_String">String</a>, i: <a href="../std/u64.md#std_u64">u64</a>, j: <a href="../std/u64.md#std_u64">u64</a>): <a href="../std/string.md#std_string_String">String</a> { <b>let</b> <a href="../std/string.md#std_string_bytes">bytes</a> = &s.<a href="../std/string.md#std_string_bytes">bytes</a>; <b>let</b> l = <a href="../std/string.md#std_string_bytes">bytes</a>.<a href="../std/string.md#std_string_length">length</a>(); <b>assert</b>!( j <= l && i <= j && <a href="../std/string.md#std_string_internal_is_char_boundary">internal_is_char_boundary</a>(<a href="../std/string.md#std_string_bytes">bytes</a>, i) && <a href="../std/string.md#std_string_internal_is_char_boundary">internal_is_char_boundary</a>(<a href="../std/string.md#std_string_bytes">bytes</a>, j), <a href="../std/string.md#std_string_EInvalidIndex">EInvalidIndex</a>, ); <a href="../std/string.md#std_string_String">String</a> { <a href="../std/string.md#std_string_bytes">bytes</a>: <a href="../std/string.md#std_string_internal_sub_string">internal_sub_string</a>(<a href="../std/string.md#std_string_bytes">bytes</a>, i, j) } } </code></pre> </details><a name="std_string_index_of"></a>
index_ofComputes the index of the first occurrence of a string. Returns <code>s.<a href="../std/string.md#std_string_length">length</a>()</code> if no occurrence found.
<pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_index_of">index_of</a>(s: &<a href="../std/string.md#std_string_String">std::string::String</a>, r: &<a href="../std/string.md#std_string_String">std::string::String</a>): <a href="../std/u64.md#std_u64">u64</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/string.md#std_string_index_of">index_of</a>(s: &<a href="../std/string.md#std_string_String">String</a>, r: &<a href="../std/string.md#std_string_String">String</a>): <a href="../std/u64.md#std_u64">u64</a> { <a href="../std/string.md#std_string_internal_index_of">internal_index_of</a>(&s.<a href="../std/string.md#std_string_bytes">bytes</a>, &r.<a href="../std/string.md#std_string_bytes">bytes</a>) } </code></pre> </details><a name="std_string_internal_check_utf8"></a>
internal_check_utf8<a name="std_string_internal_is_char_boundary"></a>
internal_is_char_boundary<a name="std_string_internal_sub_string"></a>
internal_sub_string<a name="std_string_internal_index_of"></a>
internal_index_of<a name="std_string_bytes"></a>
bytes<a name="std_string_sub_string"></a>
sub_string