Skip to main content
Log in

Mojo struct

String

struct String

Represents a mutable string.

Aliases

  • ASCII_LOWERCASE = "abcdefghijklmnopqrstuvwxyz":
  • ASCII_UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
  • ASCII_LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ":
  • DIGITS = "0123456789":
  • HEX_DIGITS = "0123456789abcdefABCDEF":
  • OCT_DIGITS = "01234567":
  • PUNCTUATION = "!\22#$%&'()*+,-./:;<=>?@[\\]^_{|}~"`:
  • PRINTABLE = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\22#$%&'()*+,-./:;<=>?@[\\]^_{|}~ \t\n\r\v\f"`:

Implemented traits

AnyType, AsBytes, Boolable, CollectionElement, CollectionElementNew, Comparable, Copyable, EqualityComparable, ExplicitlyCopyable, FloatableRaising, GreaterThanComparable, GreaterThanOrEqualComparable, Hashable, IntableRaising, KeyElement, LessThanComparable, LessThanOrEqualComparable, Movable, Representable, Sized, Stringable, UnknownDestructibility, Writable, Writer, _HashableWithHasher

Methods

__init__

__init__(out self)

Construct an uninitialized string.

__init__[T: Stringable](out self, value: T)

Initialize from a type conforming to Stringable.

Parameters:

  • T (Stringable): The type conforming to Stringable.

Args:

  • value (T): The object to get the string representation of.

__init__[T: StringableRaising](out self, value: T)

Initialize from a type conforming to StringableRaising.

Parameters:

  • T (StringableRaising): The type conforming to Stringable.

Args:

  • value (T): The object to get the string representation of.

Raises:

If there is an error when computing the string representation of the type.

__init__[*Ts: Writable](out self, *args: *Ts, *, sep: StringSlice[StaticConstantOrigin] = StringSlice(""), end: StringSlice[StaticConstantOrigin] = StringSlice(""))

Construct a string by concatenating a sequence of Writable arguments.

Examples:

Construct a String from several Writable arguments:

var string = String(1, 2.0, "three", sep=", ")
print(string) # "1, 2.0, three"
var string = String(1, 2.0, "three", sep=", ")
print(string) # "1, 2.0, three"

.

Parameters:

  • *Ts (Writable): The types of the arguments to format. Each type must be satisfy Writable.

Args:

  • *args (*Ts): A sequence of Writable arguments.
  • sep (StringSlice[StaticConstantOrigin]): The separator used between elements.
  • end (StringSlice[StaticConstantOrigin]): The String to write after printing the elements.

__init__[*Ts: Writable](out self, args: VariadicPack[origin, Writable, Ts], sep: StringSlice[StaticConstantOrigin] = StringSlice(""), end: StringSlice[StaticConstantOrigin] = StringSlice(""))

Construct a string by passing a variadic pack.

Examples:

fn variadic_pack_to_string[
*Ts: Writable,
](*args: *Ts) -> String:
return String(args)

string = variadic_pack_to_string(1, ", ", 2.0, ", ", "three")
fn variadic_pack_to_string[
*Ts: Writable,
](*args: *Ts) -> String:
return String(args)

string = variadic_pack_to_string(1, ", ", 2.0, ", ", "three")

.

Parameters:

  • *Ts (Writable): The types of the arguments to format. Each type must be satisfy Writable.

Args:

  • args (VariadicPack[origin, Writable, Ts]): A VariadicPack of Writable arguments.
  • sep (StringSlice[StaticConstantOrigin]): The separator used between elements.
  • end (StringSlice[StaticConstantOrigin]): The String to write after printing the elements.

__init__(out self, value: None)

Initialize a None type as "None".

Args:

  • value (None): The object to get the string representation of.

__init__(out self, *, capacity: Int)

Construct an uninitialized string with the given capacity.

Args:

  • capacity (Int): The capacity of the string.

__init__(out self, *, owned buffer: List[SIMD[uint8, 1], hint_trivial_type])

Construct a string from a buffer of bytes without copying the allocated data.

The buffer must be terminated with a null byte:

var buf = List[UInt8]()
buf.append(ord('H'))
buf.append(ord('i'))
buf.append(0)
var hi = String(buffer=buf)
var buf = List[UInt8]()
buf.append(ord('H'))
buf.append(ord('i'))
buf.append(0)
var hi = String(buffer=buf)

Args:

  • buffer (List[SIMD[uint8, 1], hint_trivial_type]): The buffer.

@implicit __init__(out self, literal: StringLiteral)

Constructs a String value given a constant string.

Args:

  • literal (StringLiteral): The input constant string.

__init__(out self, *, ptr: UnsafePointer[SIMD[uint8, 1]], length: UInt)

Creates a string from the buffer. Note that the string now owns the buffer.

The buffer must be terminated with a null byte.

Args:

  • ptr (UnsafePointer[SIMD[uint8, 1]]): The pointer to the buffer.
  • length (UInt): The length of the buffer, including the null terminator.

__bool__

__bool__(self) -> Bool

Checks if the string is not empty.

Returns:

True if the string length is greater than zero, and False otherwise.

__getitem__

__getitem__[I: Indexer](self, idx: I) -> Self

Gets the character at the specified position.

Parameters:

  • I (Indexer): A type that can be used as an index.

Args:

  • idx (I): The index value.

Returns:

A new string containing the character at the specified position.

__getitem__(self, span: Slice) -> Self

Gets the sequence of characters at the specified positions.

Args:

  • span (Slice): A slice that specifies positions of the new substring.

Returns:

A new string containing the string at the specified positions.

__lt__

__lt__(self, rhs: Self) -> Bool

Compare this String to the RHS using LT comparison.

Args:

  • rhs (Self): The other String to compare against.

Returns:

True if this String is strictly less than the RHS String and False otherwise.

__le__

__le__(self, rhs: Self) -> Bool

Compare this String to the RHS using LE comparison.

Args:

  • rhs (Self): The other String to compare against.

Returns:

True iff this String is less than or equal to the RHS String.

__eq__

__eq__(self, other: Self) -> Bool

Compares two Strings if they have the same values.

Args:

  • other (Self): The rhs of the operation.

Returns:

True if the Strings are equal and False otherwise.

__ne__

__ne__(self, other: Self) -> Bool

Compares two Strings if they do not have the same values.

Args:

  • other (Self): The rhs of the operation.

Returns:

True if the Strings are not equal and False otherwise.

__gt__

__gt__(self, rhs: Self) -> Bool

Compare this String to the RHS using GT comparison.

Args:

  • rhs (Self): The other String to compare against.

Returns:

True iff this String is strictly greater than the RHS String.

__ge__

__ge__(self, rhs: Self) -> Bool

Compare this String to the RHS using GE comparison.

Args:

  • rhs (Self): The other String to compare against.

Returns:

True iff this String is greater than or equal to the RHS String.

__contains__

__contains__(self, substr: StringSlice[origin]) -> Bool

Returns True if the substring is contained within the current string.

Args:

  • substr (StringSlice[origin]): The substring to check.

Returns:

True if the string contains the substring.

__add__

__add__(self, other: StringSlice[origin]) -> Self

Creates a string by appending a string slice at the end.

Args:

  • other (StringSlice[origin]): The string slice to append.

Returns:

The new constructed string.

__mul__

__mul__(self, n: Int) -> Self

Concatenates the string n times.

Args:

  • n (Int): The number of times to concatenate the string.

Returns:

The string concatenated n times.

__radd__

__radd__(self, other: StringSlice[origin]) -> Self

Creates a string by prepending another string slice to the start.

Args:

  • other (StringSlice[origin]): The string to prepend.

Returns:

The new constructed string.

__iadd__

__iadd__(mut self, other: StringSlice[origin])

Appends another string slice to this string.

Args:

  • other (StringSlice[origin]): The string to append.

copy

copy(self) -> Self

Explicitly copy the provided value.

Returns:

A copy of the value.

write_bytes

write_bytes(mut self, bytes: Span[SIMD[uint8, 1], origin])

Write a byte span to this String.

Args:

  • bytes (Span[SIMD[uint8, 1], origin]): The byte span to write to this String. Must NOT be null terminated.

write

write[*Ts: Writable](mut self, *args: *Ts)

Write a sequence of Writable arguments to the provided Writer.

Parameters:

  • *Ts (Writable): Types of the provided argument sequence.

Args:

  • *args (*Ts): Sequence of arguments to write to this Writer.

static write[*Ts: Writable](*args: *Ts, *, sep: StringSlice[StaticConstantOrigin] = StringSlice(""), end: StringSlice[StaticConstantOrigin] = StringSlice("")) -> Self

Construct a string by concatenating a sequence of Writable arguments.

This is used only when reusing the write_to method for __str__ in order to avoid an endless loop recalling the constructor:

fn write_to[W: Writer](self, mut writer: W):
writer.write_bytes(self.as_bytes())

fn __str__(self) -> String:
return String.write(self)
fn write_to[W: Writer](self, mut writer: W):
writer.write_bytes(self.as_bytes())

fn __str__(self) -> String:
return String.write(self)

Otherwise you can use the String constructor directly without calling the String.write static method:

var msg = String("my message", 42, 42.2, True)
var msg = String("my message", 42, 42.2, True)

.

Parameters:

  • *Ts (Writable): The types of the arguments to format. Each type must be satisfy Writable.

Args:

  • *args (*Ts): A sequence of Writable arguments.
  • sep (StringSlice[StaticConstantOrigin]): The separator used between elements.
  • end (StringSlice[StaticConstantOrigin]): The String to write after printing the elements.

Returns:

A string formed by formatting the argument sequence.

__iter__

__iter__(self) -> _StringSliceIter[self]

Iterate over the string, returning immutable references.

Returns:

An iterator of references to the string elements.

__reversed__

__reversed__(self) -> _StringSliceIter[self, False]

Iterate backwards over the string, returning immutable references.

Returns:

A reversed iterator of references to the string elements.

__len__

__len__(self) -> Int

Get the string length of in bytes.

This function returns the number of bytes in the underlying UTF-8 representation of the string.

To get the number of Unicode codepoints in a string, use len(str.chars()).

Examples

Query the length of a string, in bytes and Unicode codepoints:

from testing import assert_equal

var s = String("ನಮಸ್ಕಾರ")

assert_equal(len(s), 21)
assert_equal(len(s.chars()), 7)
from testing import assert_equal

var s = String("ನಮಸ್ಕಾರ")

assert_equal(len(s), 21)
assert_equal(len(s.chars()), 7)

Strings containing only ASCII characters have the same byte and Unicode codepoint length:

from testing import assert_equal

var s = String("abc")

assert_equal(len(s), 3)
assert_equal(len(s.chars()), 3)
from testing import assert_equal

var s = String("abc")

assert_equal(len(s), 3)
assert_equal(len(s.chars()), 3)

.

Returns:

The string length in bytes.

__str__

__str__(self) -> Self

Gets the string itself.

This method ensures that you can pass a String to a method that takes a Stringable value.

Returns:

The string itself.

__repr__

__repr__(self) -> Self

Return a Mojo-compatible representation of the String instance.

Returns:

A new representation of the string.

__fspath__

__fspath__(self) -> Self

Return the file system path representation (just the string itself).

Returns:

The file system path representation as a string.

write_to

write_to[W: Writer](self, mut writer: W)

Formats this string to the provided Writer.

Parameters:

  • W (Writer): A type conforming to the Writable trait.

Args:

  • writer (W): The object to write to.

join

join[*Ts: Writable](self, *elems: *Ts) -> Self

Joins string elements using the current string as a delimiter.

Parameters:

  • *Ts (Writable): The types of the elements.

Args:

  • *elems (*Ts): The input values.

Returns:

The joined string.

join[T: WritableCollectionElement, //, buffer_size: Int = 4096](self, elems: List[T, hint_trivial_type]) -> Self

Joins string elements using the current string as a delimiter. Defaults to writing to the stack if total bytes of elems is less than buffer_size, otherwise will allocate once to the heap and write directly into that. The buffer_size defaults to 4096 bytes to match the default page size on arm64 and x86-64, but you can increase this if you're joining a very large List of elements to write into the stack instead of the heap.

Parameters:

  • T (WritableCollectionElement): The types of the elements.
  • buffer_size (Int): The max size of the stack buffer.

Args:

  • elems (List[T, hint_trivial_type]): The input values.

Returns:

The joined string.

chars

chars(self) -> CharsIter[self]

Returns an iterator over the Chars encoded in this string slice.

Examples

Print the characters in a string:

from testing import assert_equal

var s = String("abc")
var iter = s.chars()
assert_equal(iter.__next__(), Char.ord("a"))
assert_equal(iter.__next__(), Char.ord("b"))
assert_equal(iter.__next__(), Char.ord("c"))
assert_equal(iter.__has_next__(), False)
from testing import assert_equal

var s = String("abc")
var iter = s.chars()
assert_equal(iter.__next__(), Char.ord("a"))
assert_equal(iter.__next__(), Char.ord("b"))
assert_equal(iter.__next__(), Char.ord("c"))
assert_equal(iter.__has_next__(), False)

chars() iterates over Unicode codepoints, and supports multibyte codepoints:

from testing import assert_equal

# A visual character composed of a combining sequence of 2 codepoints.
var s = String("á")
assert_equal(s.byte_length(), 3)

var iter = s.chars()
assert_equal(iter.__next__(), Char.ord("a"))
# U+0301 Combining Acute Accent
assert_equal(iter.__next__().to_u32(), 0x0301)
assert_equal(iter.__has_next__(), False)
from testing import assert_equal

# A visual character composed of a combining sequence of 2 codepoints.
var s = String("á")
assert_equal(s.byte_length(), 3)

var iter = s.chars()
assert_equal(iter.__next__(), Char.ord("a"))
# U+0301 Combining Acute Accent
assert_equal(iter.__next__().to_u32(), 0x0301)
assert_equal(iter.__has_next__(), False)

.

Returns:

An iterator type that returns successive Char values stored in this string slice.

char_slices

char_slices(self) -> _StringSliceIter[self]

Returns an iterator over single-character slices of this string.

Each returned slice points to a single Unicode codepoint encoded in the underlying UTF-8 representation of this string.

Examples

Iterate over the character slices in a string:

from testing import assert_equal, assert_true

var s = String("abc")
var iter = s.char_slices()
assert_true(iter.__next__() == "a")
assert_true(iter.__next__() == "b")
assert_true(iter.__next__() == "c")
assert_equal(iter.__has_next__(), False)
from testing import assert_equal, assert_true

var s = String("abc")
var iter = s.char_slices()
assert_true(iter.__next__() == "a")
assert_true(iter.__next__() == "b")
assert_true(iter.__next__() == "c")
assert_equal(iter.__has_next__(), False)

.

Returns:

An iterator of references to the string elements.

unsafe_ptr

unsafe_ptr(ref self) -> UnsafePointer[SIMD[uint8, 1], mut=self_is_mut, origin=self_is_origin]

Retrieves a pointer to the underlying memory.

Returns:

The pointer to the underlying memory.

unsafe_cstr_ptr

unsafe_cstr_ptr(self) -> UnsafePointer[SIMD[int8, 1]]

Retrieves a C-string-compatible pointer to the underlying memory.

The returned pointer is guaranteed to be null, or NUL terminated.

Returns:

The pointer to the underlying memory.

as_bytes

as_bytes(ref self) -> Span[SIMD[uint8, 1], self_is_origin]

Returns a contiguous slice of the bytes owned by this string.

Notes: This does not include the trailing null terminator.

Returns:

A contiguous slice pointing to the bytes owned by this string.

as_string_slice

as_string_slice(ref self) -> StringSlice[self_is_origin]

Returns a string slice of the data owned by this string.

Returns:

A string slice pointing to the data owned by this string.

byte_length

byte_length(self) -> Int

Get the string length in bytes.

Notes: This does not include the trailing null terminator in the count.

Returns:

The length of this string in bytes, excluding null terminator.

count

count(self, substr: StringSlice[origin]) -> Int

Return the number of non-overlapping occurrences of substring substr in the string.

If sub is empty, returns the number of empty strings between characters which is the length of the string plus one.

Args:

  • substr (StringSlice[origin]): The substring to count.

Returns:

The number of occurrences of substr.

find

find(self, substr: StringSlice[origin], start: Int = 0) -> Int

Finds the offset of the first occurrence of substr starting at start. If not found, returns -1.

Args:

  • substr (StringSlice[origin]): The substring to find.
  • start (Int): The offset from which to find.

Returns:

The offset of substr relative to the beginning of the string.

rfind

rfind(self, substr: StringSlice[origin], start: Int = 0) -> Int

Finds the offset of the last occurrence of substr starting at start. If not found, returns -1.

Args:

  • substr (StringSlice[origin]): The substring to find.
  • start (Int): The offset from which to find.

Returns:

The offset of substr relative to the beginning of the string.

isspace

isspace(self) -> Bool

Determines whether every character in the given String is a python whitespace String. This corresponds to Python's universal separators " \t\n\v\f\r\x1c\x1d\x1e\x85\u2028\u2029".

Returns:

True if the whole String is made up of whitespace characters listed above, otherwise False.

split

split(self, sep: StringSlice[origin], maxsplit: Int = -1) -> List[String]

Split the string by a separator.

Examples:

# Splitting a space
_ = String("hello world").split(" ") # ["hello", "world"]
# Splitting adjacent separators
_ = String("hello,,world").split(",") # ["hello", "", "world"]
# Splitting with maxsplit
_ = String("1,2,3").split(",", 1) # ['1', '2,3']
# Splitting a space
_ = String("hello world").split(" ") # ["hello", "world"]
# Splitting adjacent separators
_ = String("hello,,world").split(",") # ["hello", "", "world"]
# Splitting with maxsplit
_ = String("1,2,3").split(",", 1) # ['1', '2,3']

.

Args:

  • sep (StringSlice[origin]): The string to split on.
  • maxsplit (Int): The maximum amount of items to split from String. Defaults to unlimited.

Returns:

A List of Strings containing the input split by the separator.

Raises:

If the separator is empty.

split(self, sep: NoneType = None, maxsplit: Int = -1) -> List[String]

Split the string by every Whitespace separator.

Examples:

# Splitting an empty string or filled with whitespaces
_ = String(" ").split() # []
_ = String("").split() # []

# Splitting a string with leading, trailing, and middle whitespaces
_ = String(" hello world ").split() # ["hello", "world"]
# Splitting adjacent universal newlines:
_ = String(
"hello \t\n\v\f\r\x1c\x1d\x1e\x85\u2028\u2029world"
).split() # ["hello", "world"]
# Splitting an empty string or filled with whitespaces
_ = String(" ").split() # []
_ = String("").split() # []

# Splitting a string with leading, trailing, and middle whitespaces
_ = String(" hello world ").split() # ["hello", "world"]
# Splitting adjacent universal newlines:
_ = String(
"hello \t\n\v\f\r\x1c\x1d\x1e\x85\u2028\u2029world"
).split() # ["hello", "world"]

.

Args:

  • sep (NoneType): None.
  • maxsplit (Int): The maximum amount of items to split from String. Defaults to unlimited.

Returns:

A List of Strings containing the input split by the separator.

splitlines

splitlines(self, keepends: Bool = False) -> List[String]

Split the string at line boundaries. This corresponds to Python's universal newlines: "\r\n" and "\t\n\v\f\r\x1c\x1d\x1e\x85\u2028\u2029".

Args:

  • keepends (Bool): If True, line breaks are kept in the resulting strings.

Returns:

A List of Strings containing the input split by line boundaries.

replace

replace(self, old: StringSlice[origin], new: StringSlice[origin]) -> Self

Return a copy of the string with all occurrences of substring old if replaced by new.

Args:

  • old (StringSlice[origin]): The substring to replace.
  • new (StringSlice[origin]): The substring to replace with.

Returns:

The string where all occurrences of old are replaced with new.

strip

strip(self, chars: StringSlice[origin]) -> StringSlice[self]

Return a copy of the string with leading and trailing characters removed.

Args:

  • chars (StringSlice[origin]): A set of characters to be removed. Defaults to whitespace.

Returns:

A copy of the string with no leading or trailing characters.

strip(self) -> StringSlice[self]

Return a copy of the string with leading and trailing whitespaces removed. This only takes ASCII whitespace into account: " \t\n\v\f\r\x1c\x1d\x1e".

Returns:

A copy of the string with no leading or trailing whitespaces.

rstrip

rstrip(self, chars: StringSlice[origin]) -> StringSlice[self]

Return a copy of the string with trailing characters removed.

Args:

  • chars (StringSlice[origin]): A set of characters to be removed. Defaults to whitespace.

Returns:

A copy of the string with no trailing characters.

rstrip(self) -> StringSlice[self]

Return a copy of the string with trailing whitespaces removed. This only takes ASCII whitespace into account: " \t\n\v\f\r\x1c\x1d\x1e".

Returns:

A copy of the string with no trailing whitespaces.

lstrip

lstrip(self, chars: StringSlice[origin]) -> StringSlice[self]

Return a copy of the string with leading characters removed.

Args:

  • chars (StringSlice[origin]): A set of characters to be removed. Defaults to whitespace.

Returns:

A copy of the string with no leading characters.

lstrip(self) -> StringSlice[self]

Return a copy of the string with leading whitespaces removed. This only takes ASCII whitespace into account: " \t\n\v\f\r\x1c\x1d\x1e".

Returns:

A copy of the string with no leading whitespaces.

__hash__

__hash__(self) -> UInt

Hash the underlying buffer using builtin hash.

Returns:

A 64-bit hash value. This value is not suitable for cryptographic uses. Its intended usage is for data structures. See the hash builtin documentation for more details.

__hash__[H: _Hasher](self, mut hasher: H)

Updates hasher with the underlying bytes.

Parameters:

  • H (_Hasher): The hasher type.

Args:

  • hasher (H): The hasher instance.

lower

lower(self) -> Self

Returns a copy of the string with all cased characters converted to lowercase.

Returns:

A new string where cased letters have been converted to lowercase.

upper

upper(self) -> Self

Returns a copy of the string with all cased characters converted to uppercase.

Returns:

A new string where cased letters have been converted to uppercase.

startswith

startswith(self, prefix: StringSlice[origin], start: Int = 0, end: Int = -1) -> Bool

Checks if the string starts with the specified prefix between start and end positions. Returns True if found and False otherwise.

Args:

  • prefix (StringSlice[origin]): The prefix to check.
  • start (Int): The start offset from which to check.
  • end (Int): The end offset from which to check.

Returns:

True if the self[start:end] is prefixed by the input prefix.

endswith

endswith(self, suffix: StringSlice[origin], start: Int = 0, end: Int = -1) -> Bool

Checks if the string end with the specified suffix between start and end positions. Returns True if found and False otherwise.

Args:

  • suffix (StringSlice[origin]): The suffix to check.
  • start (Int): The start offset from which to check.
  • end (Int): The end offset from which to check.

Returns:

True if the self[start:end] is suffixed by the input suffix.

removeprefix

removeprefix(self, prefix: StringSlice[origin], /) -> Self

Returns a new string with the prefix removed if it was present.

For example:

print(String('TestHook').removeprefix('Test'))
# 'Hook'
print(String('BaseTestCase').removeprefix('Test'))
# 'BaseTestCase'
print(String('TestHook').removeprefix('Test'))
# 'Hook'
print(String('BaseTestCase').removeprefix('Test'))
# 'BaseTestCase'

Args:

  • prefix (StringSlice[origin]): The prefix to remove from the string.

Returns:

string[len(prefix):] if the string starts with the prefix string, or a copy of the original string otherwise.

removesuffix

removesuffix(self, suffix: StringSlice[origin], /) -> Self

Returns a new string with the suffix removed if it was present.

For example:

print(String('TestHook').removesuffix('Hook'))
# 'Test'
print(String('BaseTestCase').removesuffix('Test'))
# 'BaseTestCase'
print(String('TestHook').removesuffix('Hook'))
# 'Test'
print(String('BaseTestCase').removesuffix('Test'))
# 'BaseTestCase'

Args:

  • suffix (StringSlice[origin]): The suffix to remove from the string.

Returns:

string[:-len(suffix)] if the string ends with the suffix string, or a copy of the original string otherwise.

__int__

__int__(self) -> Int

Parses the given string as a base-10 integer and returns that value. If the string cannot be parsed as an int, an error is raised.

Returns:

An integer value that represents the string, or otherwise raises.

__float__

__float__(self) -> SIMD[float64, 1]

Parses the string as a float point number and returns that value. If the string cannot be parsed as a float, an error is raised.

Returns:

A float value that represents the string, or otherwise raises.

format

format[*Ts: _CurlyEntryFormattable](self, *args: *Ts) -> Self

Format a template with *args.

Examples:

# Manual indexing:
print(String("{0} {1} {0}").format("Mojo", 1.125)) # Mojo 1.125 Mojo
# Automatic indexing:
print(String("{} {}").format(True, "hello world")) # True hello world
# Manual indexing:
print(String("{0} {1} {0}").format("Mojo", 1.125)) # Mojo 1.125 Mojo
# Automatic indexing:
print(String("{} {}").format(True, "hello world")) # True hello world

.

Parameters:

  • *Ts (_CurlyEntryFormattable): The types of substitution values that implement Representable and Stringable (to be changed and made more flexible).

Args:

  • *args (*Ts): The substitution values.

Returns:

The template with the given values substituted.

isdigit

isdigit(self) -> Bool

A string is a digit string if all characters in the string are digits and there is at least one character in the string.

Note that this currently only works with ASCII strings.

Returns:

True if all characters are digits and it's not empty else False.

isupper

isupper(self) -> Bool

Returns True if all cased characters in the string are uppercase and there is at least one cased character.

Returns:

True if all cased characters in the string are uppercase and there is at least one cased character, False otherwise.

islower

islower(self) -> Bool

Returns True if all cased characters in the string are lowercase and there is at least one cased character.

Returns:

True if all cased characters in the string are lowercase and there is at least one cased character, False otherwise.

isprintable

isprintable(self) -> Bool

Returns True if all characters in the string are ASCII printable.

Note that this currently only works with ASCII strings.

Returns:

True if all characters are printable else False.

rjust

rjust(self, width: Int, fillchar: StringLiteral = " ") -> Self

Returns the string right justified in a string of specified width.

Args:

  • width (Int): The width of the field containing the string.
  • fillchar (StringLiteral): Specifies the padding character.

Returns:

Returns right justified string, or self if width is not bigger than self length.

ljust

ljust(self, width: Int, fillchar: StringLiteral = " ") -> Self

Returns the string left justified in a string of specified width.

Args:

  • width (Int): The width of the field containing the string.
  • fillchar (StringLiteral): Specifies the padding character.

Returns:

Returns left justified string, or self if width is not bigger than self length.

center

center(self, width: Int, fillchar: StringLiteral = " ") -> Self

Returns the string center justified in a string of specified width.

Args:

  • width (Int): The width of the field containing the string.
  • fillchar (StringLiteral): Specifies the padding character.

Returns:

Returns center justified string, or self if width is not bigger than self length.

reserve

reserve(mut self, new_capacity: Int)

Reserves the requested capacity.

Notes: If the current capacity is greater or equal, this is a no-op. Otherwise, the storage is reallocated and the data is moved.

Args:

  • new_capacity (Int): The new capacity.