class String
Overview
A String represents an immutable sequence of UTF-8 characters.
A String is typically created with a string literal, enclosing UTF-8 characters
in double quotes:
"hello world"
A backslash can be used to denote some characters inside the string:
"\"" # double quote
"\\" # backslash
"\e" # escape
"\f" # form feed
"\n" # newline
"\r" # carriage return
"\t" # tab
"\v" # vertical tab
You can use a backslash followed by an u and four hexadecimal characters to denote a unicode codepoint written:
"\u0041" # == "A"
Or you can use curly braces and specify up to six hexadecimal numbers (0 to 10FFFF):
"\u{41}" # == "A"
A string can span multiple lines:
"hello
world" # same as "hello\n world"
Note that in the above example trailing and leading spaces, as well as newlines, end up in the resulting string. To avoid this, you can split a string into multiple lines by joining multiple literals with a backslash:
"hello " \
"world, " \
"no newlines" # same as "hello world, no newlines"
Alternatively, a backslash followed by a newline can be inserted inside the string literal:
"hello \
world, \
no newlines" # same as "hello world, no newlines"
In this case, leading whitespace is not included in the resulting string.
If you need to write a string that has many double quotes, parentheses, or similar characters, you can use alternative literals:
# Supports double quotes and nested parentheses
%(hello ("world")) # same as "hello (\"world\")"
# Supports double quotes and nested brackets
%[hello ["world"]] # same as "hello [\"world\"]"
# Supports double quotes and nested curlies
%{hello {"world"}} # same as "hello {\"world\"}"
# Supports double quotes and nested angles
%<hello <"world">> # same as "hello <\"world\">"
To create a String with embedded expressions, you can use string interpolation:
a = 1
b = 2
"sum = #{a + b}" # "sum = 3"
This ends up invoking Object#to_s(IO) on each expression enclosed by #{...}.
If you need to dynamically build a string, use String#build or IO::Memory.
Non UTF-8 valid strings
String might end up being conformed of bytes which are an invalid
byte sequence according to UTF-8. This can happen if the string is created
via one of the constructors that accept bytes, or when getting a string
from String.build or IO::Memory. No exception will be raised, but
invalid byte sequences, when asked as chars, will use the unicode replacement
char (value 0xFFFD). For example:
# here 255 is not a valid byte value in the UTF-8 encoding
string = String.new(Bytes[255, 97])
string.valid_encoding? # => false
# The first char here is the unicode replacement char
string.chars # => ['�', 'a']
One can also create strings with specific byte value in them by using octal and hexadecimal escape sequences:
# Octal escape sequences
"\101" # # => "A"
"\12" # # => "\n"
"\1" # string with one character with code point 1
"\377" # string with one byte with value 255
# Hexadecimal escape sequences
"\x41" # # => "A"
"\xFF" # string with one byte with value 255
The reason for allowing strings that don't have a valid UTF-8 sequence is that the world is full of content that isn't properly encoded, and having a program raise an exception or stop because of this is not good. It's better if programs are more resilient, but show a replacement character when there's an error in incoming data.
Included Modules
Defined in:
string.crstring/utf16.cr
big/big_int.cr
big/big_float.cr
big/big_decimal.cr
json/to_json.cr
yaml/to_yaml.cr
Constructors
-
.build(capacity = 64, &) : self
Builds a
Stringby creating aString::Builderwith the given initial capacity, yielding it to the block and finally getting aStringout of it. -
.from_utf16(slice : Slice(UInt16)) : String
Decodes the given slice UTF-16 sequence into a String.
- .new(pull : JSON::PullParser)
- .new(capacity : Int, &)
-
.new(slice : Bytes)
Creates a
Stringfrom the given slice. -
.new(chars : Pointer(UInt8))
Creates a
Stringfrom a pointer. - .new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
-
.new(chars : Pointer(UInt8), bytesize, size = 0)
Creates a new
Stringfrom a pointer, indicating its bytesize count and, optionally, the UTF-8 codepoints count (size). -
.new(bytes : Bytes, encoding : String, invalid : Symbol? = nil) : String
Creates a new
Stringfrom the given bytes, which are encoded in the given encoding.
Class Method Summary
- .from_json_object_key?(key : String)
-
.from_utf16(pointer : Pointer(UInt16)) : Tuple(String, Pointer(UInt16))
Decodes the given slice UTF-16 sequence into a String and returns the pointer after reading.
-
.interpolation(*values : *T) forall T
Implementation of string interpolation of multiple, possibly non-string values.
-
.interpolation(*values : String)
Implementation of string interpolation of multiple string values.
-
.interpolation(value)
Implementation of string interpolation of a single non-string value.
-
.interpolation(value : String)
Implementation of string interpolation of a single string.
-
.interpolation(char : Char, value : String)
Implementation of string interpolation of a char and a string.
-
.interpolation(value : String, char : Char)
Implementation of string interpolation of a string and a char.
Instance Method Summary
-
#%(other)
Interpolates other into the string using
Kernel#sprintf. -
#*(times : Int)
Makes a new
Stringby adding str to itself times times. -
#+(other : self)
Concatenates str and other.
-
#+(char : Char)
Concatenates str and other.
-
#<=>(other : self)
The comparison operator.
-
#==(other : self)
Returns
trueif this reference is the same as other. -
#=~(regex : Regex)
Tests whether str matches regex.
-
#=~(other)
Tests whether str matches regex.
-
#[](start : Int, count : Int)
Returns a substring starting from the start character of size count.
- #[](regex : Regex)
- #[](str : String | Char)
-
#[](range : Range)
Returns a substring by using a Range's begin and end as character indices.
-
#[](index : Int)
Returns the
Charat the given index, or raisesIndexErrorif out of bounds. - #[](regex : Regex, group)
-
#[]?(start : Int, count : Int)
Like
#[Int, Int]but returnsnilif the start index is out of range. - #[]?(regex : Regex, group)
- #[]?(index : Int)
- #[]?(str : String | Char)
-
#[]?(range : Range)
Like
#[Range], but returnsnilif the range's start is out of range. - #[]?(regex : Regex)
-
#ascii_only?
Returns
trueif this String is comprised in its entirety by ASCII characters. -
#at(index : Int, &)
DEPRECATED Use
String#char_atinstead. -
#at(index : Int)
DEPRECATED Use
String#char_atinstead. -
#blank?
Returns
trueif this string consists exclusively of unicode whitespace. - #byte_at(index, &)
- #byte_at(index)
- #byte_at?(index)
- #byte_index(search : String, offset = 0)
- #byte_index(byte : Int, offset = 0)
-
#byte_index_to_char_index(index)
Returns the char index of a byte index, or
nilif out of bounds. - #byte_slice(start : Int, count : Int)
- #byte_slice(start : Int)
- #byte_slice?(start : Int, count : Int)
- #bytes
-
#bytesize : Int32
Returns the number of bytes in this string.
-
#camelcase(options : Unicode::CaseOptions = Unicode::CaseOptions::None, *, lower : Bool = false)
Converts underscores to camelcase boundaries.
-
#capitalize(options = Unicode::CaseOptions::None)
Returns a new
Stringwith the first letter converted to uppercase and every subsequent letter converted to lowercase. -
#center(len, char : Char = ' ')
Adds instances of char to left ond right of the string until it is at least size of len.
- #char_at(index : Int, &)
- #char_at(index : Int)
-
#char_index_to_byte_index(index)
Returns the byte index of a char index, or
nilif out of bounds. -
#chars
Returns an
Arrayof all characters in the string. -
#check_no_null_byte(name = nil)
Raises an
ArgumentErrorifselfhas null bytes. -
#chomp
Returns a new
Stringwith the last carriage return removed (that is, it will remove \n, \r, and \r\n). -
#chomp(suffix : String)
Returns a new
Stringwith suffix removed from the end of the string. -
#chomp(suffix : Char)
Returns a new
Stringwith suffix removed from the end of the string. - #clone
-
#codepoint_at(index)
DEPRECATED Use .char_at(index).ord instead
-
#codepoints
Returns an
Arrayof the codepoints that make the string. -
#compare(other : String, case_insensitive = false, options = Unicode::CaseOptions::None)
Compares this string with other, returning
-1,0or1depending on whether this string is less, equal or greater than other, optionally in a case_insensitive manner. -
#count(*sets)
Sets should be a list of strings following the rules described at
Char#in_set?. -
#count(other : Char)
Counts the occurrences of other char in this string.
-
#count(&)
Yields each char in this string to the block, returns the number of times the block returned a truthy value.
-
#delete(char : Char)
Returns a new
Stringwith all occurrences of char removed. -
#delete(&)
Yields each char in this string to the block.
-
#delete(*sets)
Sets should be a list of strings following the rules described at
Char#in_set?. -
#downcase(options = Unicode::CaseOptions::None)
Returns a new
Stringwith each uppercase letter replaced with its lowercase counterpart. -
#dump(io : IO) : Nil
Appends
selfto the givenIOobject using character escapes for special characters and and non-ascii characters (unicode codepoints > 128), wrapped in quotes. -
#dump : String
Returns a representation of
selfusing character escapes for special characters and and non-ascii characters (unicode codepoints > 128), wrapped in quotes. -
#dump_unquoted(io : IO) : Nil
Appends
selfto the givenIOobject using character escapes for special characters and and non-ascii characters (unicode codepoints > 128), but not wrapped in quotes. -
#dump_unquoted : String
Returns a representation of
selfusing character escapes for special characters and and non-ascii characters (unicode codepoints > 128), but not wrapped in quotes. -
#dup
Returns a shallow copy of this object.
-
#each_byte
Returns an
Iteratorover each byte in the string. -
#each_byte(&)
Yields each byte in the string to the block.
-
#each_char
Returns an
Iteratorover each character in the string. -
#each_char(&) : Nil
Yields each character in the string to the block.
-
#each_char_with_index(offset = 0, &)
Yields each character and its index in the string to the block.
-
#each_codepoint(&)
Yields each codepoint to the block.
-
#each_codepoint
Returns an
Iteratorfor each codepoint. -
#each_line(chomp = true)
Returns an
Iteratorwhich yields each line of this string (seeString#each_line). -
#each_line(chomp = true, &block : String -> ) : Nil
Splits the string after each newline and yields each line to a block.
-
#empty?
Returns
trueif this is the empty string,"". -
#encode(encoding : String, invalid : Symbol? = nil) : Bytes
Returns a slice of bytes containing this string encoded in the given encoding.
- #ends_with?(str : String)
- #ends_with?(char : Char)
- #ends_with?(re : Regex)
-
#gsub(tuple : NamedTuple)
Returns a
Stringwhere all chars in the given named tuple are replaced by the corresponding tuple values. -
#gsub(hash : Hash(Char, _))
Returns a
Stringwhere all chars in the given hash are replaced by the corresponding hash values. -
#gsub(string : String, replacement)
Returns a
Stringwhere all occurrences of the given string are replaced with the given replacement. -
#gsub(pattern : Regex, replacement, backreferences = true)
Returns a
Stringwhere all occurrences of the given pattern are replaced with the given replacement. -
#gsub(pattern : Regex, hash : Hash(String, _) | NamedTuple)
Returns a
Stringwhere all occurrences of the given pattern are replaced with a hash of replacements. -
#gsub(char : Char, replacement)
Returns a
Stringwhere all occurrences of the given char are replaced with the given replacement. -
#gsub(&block : Char -> _)
Returns a
Stringwhere each character yielded to the given block is replaced by the block's return value. -
#gsub(string : String, &)
Returns a
Stringwhere all occurrences of the given string are replaced with the block's value. -
#gsub(pattern : Regex, &)
Returns a
Stringwhere all occurrences of the given pattern are replaced by the block value's value. -
#has_back_references?
This returns
trueif this string has'\\'in it. - #hash(hasher)
-
#hexbytes : Bytes
Interprets this string as containing a sequence of hexadecimal values and decodes it as a slice of bytes.
-
#hexbytes? : Bytes?
Interprets this string as containing a sequence of hexadecimal values and decodes it as a slice of bytes.
-
#includes?(search : Char | String)
Returns
trueif the string contains search. -
#index(search : Regex, offset = 0)
Returns the index of search in the string, or
nilif the string is not present. -
#index(search : String, offset = 0)
Returns the index of search in the string, or
nilif the string is not present. -
#index(search : Char, offset = 0)
Returns the index of search in the string, or
nilif the string is not present. -
#insert(index : Int, other : String)
Returns a new
Stringthat results of inserting other inselfat index. -
#insert(index : Int, other : Char)
Returns a new
Stringthat results of inserting other inselfat index. -
#inspect(io : IO) : Nil
Appends
selfto the givenIOobject using character escapes for special characters and wrapped in double quotes. -
#inspect : String
Returns a representation of
selfusing character escapes for special characters and wrapped in quotes. -
#inspect_unquoted(io : IO) : Nil
Appends
selfto the givenIOobject using character escapes for special characters but not wrapped in quotes. -
#inspect_unquoted : String
Returns a representation of
selfusing character escapes for special characters but not wrapped in quotes. -
#lchop : String
Returns a new
Stringwith the first char removed from it. -
#lchop(prefix : Char | String) : String
Returns a new
Stringwith prefix removed from the beginning of the string. -
#lchop?(prefix : Char | String) : String?
Returns a new
Stringwith prefix removed from the beginning of the string if possible, else returnsnil. -
#lchop? : String?
Returns a new
Stringwith the first char removed from it if possible, else returnsnil. - #lines(chomp = true)
-
#ljust(len, char : Char = ' ')
Adds instances of char to right of the string until it is at least size of len.
-
#lstrip(char : Char)
Returns a new string with leading occurrences of char removed.
-
#lstrip(&block : Char -> _)
Returns a new string where leading characters for which the block returns a truthy value are removed.
-
#lstrip
Returns a new
Stringwith leading whitespace removed. -
#lstrip(chars : String)
Returns a new string where leading occurrences of any char in chars are removed.
-
#match(regex : Regex, pos = 0) : Regex::MatchData?
Finds match of regex, starting at pos.
- #partition(search : Regex) : Tuple(String, String, String)
- #partition(search : Char | String) : Tuple(String, String, String)
-
#presence : self?
Returns
selfunless#blank?istruein which case it returnsnil. -
#pretty_print(pp : PrettyPrint) : Nil
Pretty prints
selfinto the given printer. -
#rchop : String
Returns a new
Stringwith the last character removed. -
#rchop(suffix : Char | String) : String
Returns a new
Stringwith suffix removed from the end of the string. -
#rchop?(suffix : Char | String) : String?
Returns a new
Stringwith suffix removed from the end of the string if possible, else returnsnil. -
#rchop? : String?
Returns a new
Stringwith the last character removed if possible, else returnsnil. -
#reverse
Reverses the order of characters in the string.
-
#rindex(search : String, offset = size - search.size)
Returns the index of the last appearance of search in the string, If offset is present, it defines the position to end the search (characters beyond this point are ignored).
-
#rindex(search : Regex, offset = size - 1)
Returns the index of the last appearance of search in the string, If offset is present, it defines the position to end the search (characters beyond this point are ignored).
-
#rindex(search : Char, offset = size - 1)
Returns the index of the last appearance of search in the string, If offset is present, it defines the position to end the search (characters beyond this point are ignored).
-
#rjust(len, char : Char = ' ')
Adds instances of char to left of the string until it is at least size of len.
- #rpartition(search : Char | String) : Tuple(String, String, String)
- #rpartition(search : Regex) : Tuple(String, String, String)
-
#rstrip(chars : String)
Returns a new string where trailing occurrences of any char in chars are removed.
-
#rstrip
Returns a new
Stringwith trailing whitespace removed. -
#rstrip(&block : Char -> _)
Returns a new string where trailing characters for which the block returns a truthy value are removed.
-
#rstrip(char : Char)
Returns a new string with trailing occurrences of char removed.
-
#scan(pattern : Regex)
Searches the string for instances of pattern, returning an
ArrayofRegex::MatchDatafor each match. -
#scan(pattern : Regex, &)
Searches the string for instances of pattern, yielding a
Regex::MatchDatafor each match. -
#scan(pattern : String, &)
Searches the string for instances of pattern, yielding the matched string for each match.
-
#scan(pattern : String)
Searches the string for instances of pattern, returning an array of the matched string for each match.
-
#scrub(replacement = Char::REPLACEMENT) : String
Returns a String where bytes that are invalid in the UTF-8 encoding are replaced with replacement.
-
#size
Returns the number of unicode codepoints in this string.
-
#split(separator : Char, limit = nil, *, remove_empty = false)
Makes an
Arrayby splitting the string on the given character separator (and removing that character). -
#split(limit : Int32? = nil, &block : String -> _)
Splits the string after any amount of ASCII whitespace characters and yields each non-whitespace part to a block.
-
#split(limit : Int32? = nil)
Makes an array by splitting the string on any amount of ASCII whitespace characters (and removing that whitespace).
-
#split(separator : Char, limit = nil, *, remove_empty = false, &block : String -> _)
Splits the string after each character separator and yields each part to a block.
-
#split(separator : String, limit = nil, *, remove_empty = false, &block : String -> _)
Splits the string after each string separator and yields each part to a block.
-
#split(separator : Regex, limit = nil, *, remove_empty = false)
Splits the string after each regex separator and yields each part to a block.
-
#split(separator : Regex, limit = nil, *, remove_empty = false, &block : String -> _)
Makes an
Arrayby splitting the string on separator (and removing instances of separator). -
#split(separator : String, limit = nil, *, remove_empty = false)
Makes an
Arrayby splitting the string on separator (and removing instances of separator). -
#squeeze(&)
Yields each char in this string to the block.
-
#squeeze(char : Char)
Returns a new
String, with all runs of char replaced by one instance. -
#squeeze(*sets : String)
Sets should be a list of strings following the rules described at
Char#in_set?. -
#squeeze
Returns a new
String, that has all characters removed, that were the same as the previous one. - #starts_with?(re : Regex)
- #starts_with?(char : Char)
- #starts_with?(str : String)
-
#strip(chars : String)
Returns a new string where leading and trailing occurrences of any char in chars are removed.
-
#strip
Returns a new
Stringwith leading and trailing whitespace removed. -
#strip(&block : Char -> _)
Returns a new string where leading and trailing characters for which the block returns a truthy value are removed.
-
#strip(char : Char)
Returns a new string where leading and trailing occurrences of char are removed.
-
#sub(index : Int, replacement : String)
Returns a new
Stringwith the character at the given index replaced by replacement. -
#sub(hash : Hash(Char, _))
Returns a
Stringwhere the first char in the string matching a key in the given hash is replaced by the corresponding hash value. -
#sub(range : Range, replacement : String)
Returns a new
Stringwith characters at the given range replaced by replacement. -
#sub(range : Range, replacement : Char)
Returns a new
Stringwith characters at the given range replaced by replacement. -
#sub(string : String, replacement)
Returns a
Stringwhere the first occurrences of the given string is replaced with the given replacement. -
#sub(pattern : Regex, replacement, backreferences = true)
Returns a
Stringwhere the first occurrence of pattern is replaced by replacement -
#sub(pattern : Regex, hash : Hash(String, _) | NamedTuple)
Returns a
Stringwhere the first occurrences of the given pattern is replaced with the matching entry from the hash of replacements. -
#sub(char : Char, replacement)
Returns a
Stringwhere the first occurrence of char is replaced by replacement. -
#sub(index : Int, replacement : Char)
Returns a new
Stringwith the character at the given index replaced by replacement. -
#sub(&block : Char -> _)
Returns a new
Stringwhere the first character is yielded to the given block and replaced by its return value. -
#sub(pattern : Regex, &)
Returns a
Stringwhere the first occurrence of pattern is replaced by the block's return value. -
#sub(string : String, &)
Returns a
Stringwhere the first occurrences of the given string is replaced with the block's value. -
#succ
Returns the successor of the string.
-
#to_big_d
Converts
selftoBigDecimal. -
#to_big_f
Converts
selfto aBigFloat. -
#to_big_i(base = 10) : BigInt
Returns a
BigIntfrom this string, in the given base. -
#to_f(whitespace : Bool = true, strict : Bool = true)
Returns the result of interpreting characters in this string as a floating point number (
Float64). -
#to_f32(whitespace : Bool = true, strict : Bool = true)
Same as
#to_fbut returns a Float32. -
#to_f32?(whitespace : Bool = true, strict : Bool = true)
Same as
#to_f?but returns a Float32. -
#to_f64(whitespace : Bool = true, strict : Bool = true)
Same as
#to_f. -
#to_f64?(whitespace : Bool = true, strict : Bool = true)
Same as
#to_f?. -
#to_f?(whitespace : Bool = true, strict : Bool = true)
Returns the result of interpreting characters in this string as a floating point number (
Float64). - #to_i(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
-
#to_i(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false)
Returns the result of interpreting leading characters in this string as an integer base base (between 2 and 36).
- #to_i16(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int16
- #to_i16(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
- #to_i16?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int16?
-
#to_i32(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
Same as
#to_i. -
#to_i32(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int32
Same as
#to_i. -
#to_i32?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int32?
Same as
#to_i. - #to_i64(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int64
- #to_i64(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
- #to_i64?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int64?
- #to_i8(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int8
- #to_i8(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
- #to_i8?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : Int8?
- #to_i?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false)
- #to_json(json : JSON::Builder)
- #to_json_object_key
-
#to_s(io : IO) : Nil
Appends a short String representation of this object which includes its class name and its object address.
-
#to_s : String
Returns a string representation of this object.
-
#to_slice : Bytes
Returns the underlying bytes of this String in an unsafe way.
- #to_u16(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt16
- #to_u16(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
- #to_u16?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt16?
- #to_u32(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt32
- #to_u32(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
- #to_u32?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt32?
- #to_u64(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
- #to_u64(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt64
- #to_u64?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt64?
- #to_u8(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt8
- #to_u8(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false, &)
- #to_u8?(base : Int = 10, whitespace : Bool = true, underscore : Bool = false, prefix : Bool = false, strict : Bool = true, leading_zero_is_octal : Bool = false) : UInt8?
-
#to_unsafe : Pointer(UInt8)
Returns a pointer to the underlying bytes of this String.
-
#to_utf16 : Slice(UInt16)
Returns the UTF-16 encoding of the given string.
- #to_yaml(yaml : YAML::Nodes::Builder)
-
#tr(from : String, to : String)
Returns a new string translating characters using from and to as a map.
-
#underscore(options : Unicode::CaseOptions = Unicode::CaseOptions::None)
Converts camelcase boundaries to underscores.
- #unsafe_byte_at(index)
- #unsafe_byte_slice(byte_offset, count)
- #unsafe_byte_slice(byte_offset)
-
#upcase(options = Unicode::CaseOptions::None)
Returns a new
Stringwith each lowercase letter replaced with its uppercase counterpart. -
#valid_encoding?
Returns
trueif this String is encoded correctly according to the UTF-8 encoding.
Instance methods inherited from module Comparable(String)
<(other : T)
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T)
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from class Reference
==(other : self)==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference)
same?(other : Nil) same?, to_s(io : IO) : Nil to_s
Constructor methods inherited from class Reference
new
new
Instance methods inherited from class Object
! : Bool
!,
!=(other)
!=,
!~(other)
!~,
==(other)
==,
===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash
hash(hasher) hash, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO)
to_json to_json, to_pretty_json(indent : String = " ")
to_pretty_json(io : IO, indent : String = " ") to_pretty_json, to_s : String
to_s(io : IO) : Nil to_s, to_yaml(io : IO)
to_yaml to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as
Class methods inherited from class Object
from_json(string_or_io, root : String)from_json(string_or_io) from_json, from_yaml(string_or_io : String | IO) from_yaml
Constructor Detail
Builds a String by creating a String::Builder with the given initial capacity, yielding
it to the block and finally getting a String out of it. The String::Builder automatically
resizes as needed.
str = String.build do |str|
str << "hello "
str << 1
end
str # => "hello 1"
Decodes the given slice UTF-16 sequence into a String.
Invalid values are encoded using the unicode replacement char with
codepoint 0xfffd.
slice = Slice[104_u16, 105_u16, 32_u16, 55296_u16, 56485_u16]
String.from_utf16(slice) # => "hi 𐂥"
Creates a new String by allocating a buffer (Pointer(UInt8)) with the given capacity, then
yielding that buffer. The block must return a tuple with the bytesize and size
(UTF-8 codepoints count) of the String. If the returned size is zero, the UTF-8 codepoints
count will be lazily computed.
The bytesize returned by the block must be less than or equal to the
capacity given to this String, otherwise ArgumentError is raised.
If you need to build a String where the maximum capacity is unknown, use String#build.
str = String.new(4) do |buffer|
buffer[0] = 'a'.ord.to_u8
buffer[1] = 'b'.ord.to_u8
{2, 2}
end
str # => "ab"
Creates a String from the given slice. Bytes will be copied from the slice.
This method is always safe to call, and the resulting string will have the contents and size of the slice.
slice = Slice.new(4) { |i| ('a'.ord + i).to_u8 }
String.new(slice) # => "abcd"
Creates a String from a pointer. Bytes will be copied from the pointer.
This method is unsafe: the pointer must point to data that eventually contains a zero byte that indicates the ends of the string. Otherwise, the result of this method is undefined and might cause a segmentation fault.
This method is typically used in C bindings, where you get a char* from a
library and the library guarantees that this pointer eventually has an
ending zero byte.
ptr = Pointer.malloc(5) { |i| i == 4 ? 0_u8 : ('a'.ord + i).to_u8 }
String.new(ptr) # => "abcd"
Creates a new String from a pointer, indicating its bytesize count
and, optionally, the UTF-8 codepoints count (size). Bytes will be
copied from the pointer.
If the given size is zero, the amount of UTF-8 codepoints will be lazily computed when needed.
ptr = Pointer.malloc(4) { |i| ('a'.ord + i).to_u8 }
String.new(ptr, 2) # => "ab"
Creates a new String from the given bytes, which are encoded in the given encoding.
The invalid argument can be:
nil: an exception is raised on invalid byte sequences:skip: invalid byte sequences are ignored
slice = Slice.new(2, 0_u8)
slice[0] = 186_u8
slice[1] = 195_u8
String.new(slice, "GB2312") # => "好"
Class Method Detail
Decodes the given slice UTF-16 sequence into a String and returns the pointer after reading. The string ends when a zero value is found.
slice = Slice[104_u16, 105_u16, 0_u16, 55296_u16, 56485_u16, 0_u16]
String.from_utf16(slice) # => "hi\0000𐂥"
pointer = slice.to_unsafe
string, pointer = String.from_utf16(pointer) # => "hi"
string, pointer = String.from_utf16(pointer) # => "𐂥"
Invalid values are encoded using the unicode replacement char with
codepoint 0xfffd.
Implementation of string interpolation of multiple, possibly non-string values.
For example, this code will end up invoking this method:
value1 = "hello"
value2 = 123
"#{value1} #{value2}!" # same as String.interpolation(value1, " ", value2, "!")
In this case the implementation will call String.build with the given values.
NOTE there should never be a need to call this method instead of using string interpolation.
Implementation of string interpolation of multiple string values.
For example, this code will end up invoking this method:
value1 = "hello"
value2 = "world"
"#{value1} #{value2}!" # same as String.interpolation(value1, " ", value2, "!")
In this case the implementation can pre-compute the needed string bytesize and so it's a bit more performant than interpolating non-string values.
NOTE there should never be a need to call this method instead of using string interpolation.
Implementation of string interpolation of a single non-string value.
For example, this code will end up invoking this method:
value = 123
"#{value}" # same as String.interpolation(value)
In this case the implementation just returns the result of calling value.to_s.
NOTE there should never be a need to call this method instead of using string interpolation.
Implementation of string interpolation of a single string.
For example, this code will end up invoking this method:
value = "hello"
"#{value}" # same as String.interpolation(value)
In this case the implementation just returns the same string.
NOTE there should never be a need to call this method instead of using string interpolation.
Implementation of string interpolation of a char and a string.
For example, this code will end up invoking this method:
char = '!'
"#{char}hello" # same as String.interpolation(char, "hello")
In this case the implementation just does char + value.
NOTE there should never be a need to call this method instead of using string interpolation.
Implementation of string interpolation of a string and a char.
For example, this code will end up invoking this method:
char = '!'
"hello#{char}" # same as String.interpolation("hello", char)
In this case the implementation just does value + char.
NOTE there should never be a need to call this method instead of using string interpolation.
Instance Method Detail
Interpolates other into the string using Kernel#sprintf.
"I have %d apples" % 5 # => "I have 5 apples"
"%s, %s, %s, D" % ['A', 'B', 'C'] # => "A, B, C, D"
"sum: %{one} + %{two} = %{three}" % {one: 1, two: 2, three: 1 + 2} # => "sum: 1 + 2 = 3"
"I have %<apples>s apples" % {apples: 4} # => "I have 4 apples"
Makes a new String by adding str to itself times times.
"Developers! " * 4
# => "Developers! Developers! Developers! Developers! "
Concatenates str and other.
"abc" + "def" # => "abcdef"
"abc" + 'd' # => "abcd"
Concatenates str and other.
"abc" + "def" # => "abcdef"
"abc" + 'd' # => "abcd"
The comparison operator.
Compares this string with other, returning -1, 0 or 1 depending on whether
this string is less, equal or greater than other.
Comparison is done byte-per-byte: if a byte is less then the other corresponding
byte, -1 is returned and so on.
If the strings are of different lengths, and the strings are equal when compared up to the shortest length, then the longer string is considered greater than the shorter one.
"abcdef" <=> "abcde" # => 1
"abcdef" <=> "abcdef" # => 0
"abcdef" <=> "abcdefg" # => -1
"abcdef" <=> "ABCDEF" # => 1
Returns true if this reference is the same as other. Invokes same?.
Tests whether str matches regex.
If successful, it returns the position of the first match.
If unsuccessful, it returns nil.
If the argument isn't a Regex, it returns nil.
"Haystack" =~ /ay/ # => 1
"Haystack" =~ /z/ # => nil
"Haystack" =~ 45 # => nil
Tests whether str matches regex.
If successful, it returns the position of the first match.
If unsuccessful, it returns nil.
If the argument isn't a Regex, it returns nil.
"Haystack" =~ /ay/ # => 1
"Haystack" =~ /z/ # => nil
"Haystack" =~ 45 # => nil
Returns a substring starting from the start character of size count.
The start argument can be negative to start counting from the end of the string.
Raises IndexError if the start index is out of range.
Raises ArgumentError if count is negative.
Returns a substring by using a Range's begin and end as character indices. Indices can be negative to start counting from the end of the string.
Raises IndexError if the range's start is out of range.
"hello"[0..2] # => "hel"
"hello"[0...2] # => "he"
"hello"[1..-1] # => "ello"
"hello"[1...-1] # => "ell"
"hello"[6..7] # raises IndexError
Returns the Char at the given index, or raises IndexError if out of bounds.
Negative indices can be used to start counting from the end of the string.
"hello"[0] # => 'h'
"hello"[1] # => 'e'
"hello"[-1] # => 'o'
"hello"[-2] # => 'l'
"hello"[5] # raises IndexError
Like #[Int, Int] but returns nil if the start index is out of range.
Like #[Range], but returns nil if the range's start is out of range.
"hello"[6..7]? # => nil
"hello"[6..]? # => nil
Returns true if this String is comprised in its entirety
by ASCII characters.
"hello".ascii_only? # => true
"你好".ascii_only? # => false
Returns true if this string consists exclusively of unicode whitespace.
"".blank? # => true
" ".blank? # => true
" a ".blank? # => false
Returns the char index of a byte index, or nil if out of bounds.
It is valid to pass #bytesize to index, and in this case the answer
will be the size of this string.
Returns this string's bytes as an Array(UInt8).
"hello".bytes # => [104, 101, 108, 108, 111]
"你好".bytes # => [228, 189, 160, 229, 165, 189]
Returns the number of bytes in this string.
"hello".bytesize # => 5
"你好".bytesize # => 6
Converts underscores to camelcase boundaries.
If lower is true, lower camelcase will be returned (the first letter is downcased).
"eiffel_tower".camelcase # => "EiffelTower"
"empire_state_building".camelcase(lower: true) # => "empireStateBuilding"
"isolated_integer".camelcase(options: Unicode::CaseOptions::Turkic) # => "İsolatedİnteger"
Returns a new String with the first letter converted to uppercase and every
subsequent letter converted to lowercase.
"hEllO".capitalize # => "Hello"
Adds instances of char to left ond right of the string until it is at least size of len.
"Purple".center(8) # => " Purple "
"Purple".center(8, '-') # => "-Purple-"
"Purple".center(9, '-') # => "-Purple--"
"Aubergine".center(8) # => "Aubergine"
Returns the byte index of a char index, or nil if out of bounds.
It is valid to pass #size to index, and in this case the answer
will be the bytesize of this string.
"hello".char_index_to_byte_index(1) # => 1
"hello".char_index_to_byte_index(5) # => 5
"こんにちは".char_index_to_byte_index(1) # => 3
"こんにちは".char_index_to_byte_index(5) # => 15
Raises an ArgumentError if self has null bytes. Returns self otherwise.
This method should sometimes be called before passing a String to a C function.
Returns a new String with the last carriage return removed (that is, it
will remove \n, \r, and \r\n).
"string\r\n".chomp # => "string"
"string\n\r".chomp # => "string\n"
"string\n".chomp # => "string"
"string".chomp # => "string"
"x".chomp.chomp # => "x"
Returns a new String with suffix removed from the end of the string.
If suffix is "\n" then "\r\n" is also removed if the string ends with it.
"hello".chomp("llo") # => "he"
"hello".chomp("ol") # => "hello"
Returns a new String with suffix removed from the end of the string.
If suffix is '\n' then "\r\n" is also removed if the string ends with it.
"hello".chomp('o') # => "hell"
"hello".chomp('a') # => "hello"
Returns an Array of the codepoints that make the string.
"ab☃".codepoints # => [97, 98, 9731]
See also: Char#ord.
Compares this string with other, returning -1, 0 or 1 depending on whether
this string is less, equal or greater than other, optionally in a case_insensitive
manner.
"abcdef".compare("abcde") # => 1
"abcdef".compare("abcdef") # => 0
"abcdef".compare("abcdefg") # => -1
"abcdef".compare("ABCDEF") # => 1
"abcdef".compare("ABCDEF", case_insensitive: true) # => 0
"abcdef".compare("ABCDEG", case_insensitive: true) # => -1
"heIIo".compare("heııo", case_insensitive: true, options: Unicode::CaseOptions::Turkic) # => 0
Sets should be a list of strings following the rules
described at Char#in_set?. Returns the number of characters
in this string that match the given set.
Counts the occurrences of other char in this string.
"aabbcc".count('a') # => 2
Yields each char in this string to the block, returns the number of times the block returned a truthy value.
"aabbcc".count { |c| ['a', 'b'].includes?(c) } # => 4
Returns a new String with all occurrences of char removed.
"aabbcc".delete('b') # => "aacc"
Yields each char in this string to the block.
Returns a new String with all characters for which the
block returned a truthy value removed.
"aabbcc".delete { |c| ['a', 'b'].includes?(c) } # => "cc"
Sets should be a list of strings following the rules
described at Char#in_set?. Returns a new String with
all characters that match the given set removed.
"aabbccdd".delete("a-c") # => "dd"
Returns a new String with each uppercase letter replaced with its lowercase
counterpart.
"hEllO".downcase # => "hello"
Appends self to the given IO object using character escapes for special characters
and and non-ascii characters (unicode codepoints > 128), wrapped in quotes.
Returns a representation of self using character escapes for special characters
and and non-ascii characters (unicode codepoints > 128), wrapped in quotes.
"\u{1f48e} - à la carte\n".dump # => %("\\u{1F48E} - \\u00E0 la carte\\n")
Appends self to the given IO object using character escapes for special characters
and and non-ascii characters (unicode codepoints > 128), but not wrapped in quotes.
Returns a representation of self using character escapes for special characters
and and non-ascii characters (unicode codepoints > 128), but not wrapped in quotes.
"\u{1f48e} - à la carte\n".dump_unquoted # => %(\\u{1F48E} - \\u00E0 la carte\\n)
Returns a shallow copy of this object.
This allocates a new object and copies the contents of
self into it.
Returns an Iterator over each byte in the string.
bytes = "ab☃".each_byte
bytes.next # => 97
bytes.next # => 98
bytes.next # => 226
bytes.next # => 152
bytes.next # => 131
Yields each byte in the string to the block.
array = [] of UInt8
"ab☃".each_byte do |byte|
array << byte
end
array # => [97, 98, 226, 152, 131]
Returns an Iterator over each character in the string.
chars = "ab☃".each_char
chars.next # => 'a'
chars.next # => 'b'
chars.next # => '☃'
Yields each character in the string to the block.
array = [] of Char
"ab☃".each_char do |char|
array << char
end
array # => ['a', 'b', '☃']
Yields each character and its index in the string to the block.
array = [] of Tuple(Char, Int32)
"ab☃".each_char_with_index do |char, index|
array << {char, index}
end
array # => [{'a', 0}, {'b', 1}, {'☃', 2}]
Accepts an optional offset parameter, which tells it to start counting from there.
Yields each codepoint to the block.
array = [] of Int32
"ab☃".each_codepoint do |codepoint|
array << codepoint
end
array # => [97, 98, 9731]
See also: Char#ord.
Returns an Iterator for each codepoint.
codepoints = "ab☃".each_codepoint
codepoints.next # => 97
codepoints.next # => 98
codepoints.next # => 9731
See also: Char#ord.
Returns an Iterator which yields each line of this string (see String#each_line).
Splits the string after each newline and yields each line to a block.
haiku = "the first cold shower
even the monkey seems to want
a little coat of straw"
haiku.each_line do |stanza|
puts stanza
end
# output:
# the first cold shower
# even the monkey seems to want
# a little coat of straw
Returns a slice of bytes containing this string encoded in the given encoding.
The invalid argument can be:
nil: an exception is raised on invalid byte sequences:skip: invalid byte sequences are ignored
"好".encode("GB2312") # => Bytes[186, 195]
"好".bytes # => [229, 165, 189]
Returns a String where all chars in the given named tuple are replaced
by the corresponding tuple values.
"hello".gsub({e: 'a', l: 'd'}) # => "haddo"
Returns a String where all chars in the given hash are replaced
by the corresponding hash values.
"hello".gsub({'e' => 'a', 'l' => 'd'}) # => "haddo"
Returns a String where all occurrences of the given string are replaced
with the given replacement.
"hello yellow".gsub("ll", "dd") # => "heddo yeddow"
Returns a String where all occurrences of the given pattern are replaced
with the given replacement.
"hello".gsub(/[aeiou]/, '*') # => "h*ll*"
Within replacement, the special match variable $~ will not refer to the
current match.
If backreferences is true (the default value), replacement can include backreferences:
"hello".gsub(/[aeiou]/, "(\\0)") # => "h(e)ll(o)"
When substitution is performed, any backreferences found in replacement
will be replaced with the contents of the corresponding capture group in
pattern. Backreferences to capture groups that were not present in
pattern or that did not match will be skipped. See Regex for information
about capture groups.
Backreferences are expressed in the form "\\d", where d is a group
number, or "\\k where name is the name of a named capture group.
A sequence of literal characters resembling a backreference can be
expressed by placing "\\" before the sequence.
"foo".gsub(/o/, "x\\0x") # => "fxoxxox"
"foofoo".gsub(/(?<bar>oo)/, "|\\k<bar>|") # => "f|oo|f|oo|"
"foo".gsub(/o/, "\\\\0") # => "f\\0\\0"
Raises ArgumentError if an incomplete named back-reference is present in
replacement.
Raises IndexError if a named group referenced in replacement is not present
in pattern.
Returns a String where all occurrences of the given pattern are replaced
with a hash of replacements. If the hash contains the matched pattern,
the corresponding value is used as a replacement. Otherwise the match is
not included in the returned string.
# "he" and "l" are matched and replaced,
# but "o" is not and so is not included
"hello".gsub(/(he|l|o)/, {"he": "ha", "l": "la"}) # => "halala"
Returns a String where all occurrences of the given char are
replaced with the given replacement.
"hello".gsub('l', "lo") # => "heloloo"
"hello world".gsub('o', 'a') # => "hella warld"
Returns a String where each character yielded to the given block
is replaced by the block's return value.
"hello".gsub { |char| char + 1 } # => "ifmmp"
"hello".gsub { "hi" } # => "hihihihihi"
Returns a String where all occurrences of the given string are replaced
with the block's value.
"hello yellow".gsub("ll") { "dd" } # => "heddo yeddow"
Returns a String where all occurrences of the given pattern are replaced
by the block value's value.
"hello".gsub(/./) { |s| s[0].ord.to_s + ' ' } # => "104 101 108 108 111 "
This returns true if this string has '\\' in it. It might not be a back reference,
but '\\' is probably used for back references, so this check is faster than parsing
the whole thing.
Interprets this string as containing a sequence of hexadecimal values and decodes it as a slice of bytes. Two consecutive bytes in the string represent a byte in the returned slice.
Raises ArgumentError if this string does not denote an hexstring.
"0102031aff".hexbytes # => Bytes[1, 2, 3, 26, 255]
"1".hexbytes # raises ArgumentError
"hello world".hexbytes # raises ArgumentError
Interprets this string as containing a sequence of hexadecimal values and decodes it as a slice of bytes. Two consecutive bytes in the string represent a byte in the returned slice.
Returns nil if this string does not denote an hexstring.
"0102031aff".hexbytes? # => Bytes[1, 2, 3, 26, 255]
"1".hexbytes? # => nil
"hello world".hexbytes? # => nil
Returns true if the string contains search.
"Team".includes?('i') # => false
"Dysfunctional".includes?("fun") # => true
Returns the index of search in the string, or nil if the string is not present.
If offset is present, it defines the position to start the search.
"Hello, World".index('o') # => 4
"Hello, World".index('Z') # => nil
"Hello, World".index("o", 5) # => 8
"Hello, World".index("H", 2) # => nil
"Hello, World".index(/[ ]+/) # => 6
"Hello, World".index(/\d+/) # => nil
Returns the index of search in the string, or nil if the string is not present.
If offset is present, it defines the position to start the search.
"Hello, World".index('o') # => 4
"Hello, World".index('Z') # => nil
"Hello, World".index("o", 5) # => 8
"Hello, World".index("H", 2) # => nil
"Hello, World".index(/[ ]+/) # => 6
"Hello, World".index(/\d+/) # => nil
Returns the index of search in the string, or nil if the string is not present.
If offset is present, it defines the position to start the search.
"Hello, World".index('o') # => 4
"Hello, World".index('Z') # => nil
"Hello, World".index("o", 5) # => 8
"Hello, World".index("H", 2) # => nil
"Hello, World".index(/[ ]+/) # => 6
"Hello, World".index(/\d+/) # => nil
Returns a new String that results of inserting other in self at index.
Negative indices count from the end of the string, and insert after
the given index.
Raises IndexError if the index is out of bounds.
"abcd".insert(0, "FOO") # => "FOOabcd"
"abcd".insert(3, "FOO") # => "abcFOOd"
"abcd".insert(4, "FOO") # => "abcdFOO"
"abcd".insert(-3, "FOO") # => "abFOOcd"
"abcd".insert(-1, "FOO") # => "abcdFOO"
"abcd".insert(5, "FOO") # raises IndexError
"abcd".insert(-6, "FOO") # raises IndexError
Returns a new String that results of inserting other in self at index.
Negative indices count from the end of the string, and insert after
the given index.
Raises IndexError if the index is out of bounds.
"abcd".insert(0, 'X') # => "Xabcd"
"abcd".insert(3, 'X') # => "abcXd"
"abcd".insert(4, 'X') # => "abcdX"
"abcd".insert(-3, 'X') # => "abXcd"
"abcd".insert(-1, 'X') # => "abcdX"
"abcd".insert(5, 'X') # raises IndexError
"abcd".insert(-6, 'X') # raises IndexError
Appends self to the given IO object using character escapes for special characters and wrapped in double quotes.
Returns a representation of self using character escapes for special characters and wrapped in quotes.
"\u{1f48e} - à la carte\n".inspect # => %("\u{1F48E} - à la carte\\n")
Appends self to the given IO object using character escapes for special characters but not wrapped in quotes.
Returns a representation of self using character escapes for special characters but not wrapped in quotes.
"\u{1f48e} - à la carte\n".inspect_unquoted # => %(\u{1F48E} - à la carte\\n)
Returns a new String with the first char removed from it.
Applying lchop to an empty string returns an empty string.
"hello".lchop # => "ello"
"".lchop # => ""
Returns a new String with prefix removed from the beginning of the string.
"hello".lchop('h') # => "ello"
"hello".lchop('g') # => "hello"
"hello".lchop("hel") # => "lo"
"hello".lchop("eh") # => "hello"
Returns a new String with prefix removed from the beginning of the string if possible, else returns nil.
"hello".lchop?('h') # => "ello"
"hello".lchop?('g') # => nil
"hello".lchop?("hel") # => "lo"
"hello".lchop?("eh") # => nil
Returns a new String with the first char removed from it if possible, else returns nil.
"hello".lchop? # => "ello"
"".lchop? # => nil
Adds instances of char to right of the string until it is at least size of len.
"Purple".ljust(8) # => "Purple "
"Purple".ljust(8, '-') # => "Purple--"
"Aubergine".ljust(8) # => "Aubergine"
Returns a new string with leading occurrences of char removed.
"aaabcdaaa".lstrip('a') # => "bcdaaa"
Returns a new string where leading characters for which the block returns a truthy value are removed.
"bcadefcba".lstrip { |c| 'a' <= c <= 'c' } # => "defcba"
Returns a new String with leading whitespace removed.
" hello ".lstrip # => "hello "
"\tgoodbye\r\n".lstrip # => "goodbye\r\n"
Returns a new string where leading occurrences of any char in chars are removed. The chars argument is not a suffix; rather; all combinations of its values are stripped.
"bcadefcba".lstrip("abc") # => "defcba"
Finds match of regex, starting at pos.
Searches separator or pattern (Regex) in the string, and returns
a Tuple with the part before it, the match, and the part after it.
If it is not found, returns str followed by two empty strings.
"hello".partition("l") # => {"he", "l", "lo"}
"hello".partition("x") # => {"hello", "", ""}
Searches separator or pattern (Regex) in the string, and returns
a Tuple with the part before it, the match, and the part after it.
If it is not found, returns str followed by two empty strings.
"hello".partition("l") # => {"he", "l", "lo"}
"hello".partition("x") # => {"hello", "", ""}
Returns self unless #blank? is true in which case it returns nil.
"a".presence # => "a"
"".presence # => nil
" ".presence # => nil
" a ".presence # => " a "
nil.presence # => nil
config = {"empty" => ""}
config["empty"]?.presence || "default" # => "default"
config["missing"]?.presence || "default" # => "default"
See also: Nil#presence.
Returns a new String with the last character removed.
Applying rchop to an empty string returns an empty string.
"string\r\n".rchop # => "string\r"
"string\n\r".rchop # => "string\n"
"string\n".rchop # => "string"
"string".rchop # => "strin"
"x".rchop.rchop # => ""
Returns a new String with suffix removed from the end of the string.
"string".rchop('g') # => "strin"
"string".rchop('x') # => "string"
"string".rchop("ing") # => "str"
"string".rchop("inx") # => "string"
Returns a new String with suffix removed from the end of the string if possible, else returns nil.
"string".rchop?('g') # => "strin"
"string".rchop?('x') # => nil
"string".rchop?("ing") # => "str"
"string".rchop?("inx") # => nil
Returns a new String with the last character removed if possible, else returns nil.
"string\r\n".rchop? # => "string\r"
"string\n\r".rchop? # => "string\n"
"string\n".rchop? # => "string"
"string".rchop? # => "strin"
"".rchop? # => nil
Reverses the order of characters in the string.
"Argentina".reverse # => "anitnegrA"
"racecar".reverse # => "racecar"
Returns the index of the last appearance of search in the string, If offset is present, it defines the position to end the search (characters beyond this point are ignored).
"Hello, World".rindex('o') # => 8
"Hello, World".rindex('Z') # => nil
"Hello, World".rindex("o", 5) # => 4
"Hello, World".rindex("W", 2) # => nil
Returns the index of the last appearance of search in the string, If offset is present, it defines the position to end the search (characters beyond this point are ignored).
"Hello, World".rindex('o') # => 8
"Hello, World".rindex('Z') # => nil
"Hello, World".rindex("o", 5) # => 4
"Hello, World".rindex("W", 2) # => nil
Returns the index of the last appearance of search in the string, If offset is present, it defines the position to end the search (characters beyond this point are ignored).
"Hello, World".rindex('o') # => 8
"Hello, World".rindex('Z') # => nil
"Hello, World".rindex("o", 5) # => 4
"Hello, World".rindex("W", 2) # => nil
Adds instances of char to left of the string until it is at least size of len.
"Purple".rjust(8) # => " Purple"
"Purple".rjust(8, '-') # => "--Purple"
"Aubergine".rjust(8) # => "Aubergine"
Searches separator or pattern (Regex) in the string from the end of the string,
and returns a Tuple with the part before it, the match, and the part after it.
If it is not found, returns two empty strings and str.
"hello".rpartition("l") # => {"hel", "l", "o"}
"hello".rpartition("x") # => {"", "", "hello"}
"hello".rpartition(/.l/) # => {"he", "ll", "o"}
Searches separator or pattern (Regex) in the string from the end of the string,
and returns a Tuple with the part before it, the match, and the part after it.
If it is not found, returns two empty strings and str.
"hello".rpartition("l") # => {"hel", "l", "o"}
"hello".rpartition("x") # => {"", "", "hello"}
"hello".rpartition(/.l/) # => {"he", "ll", "o"}
Returns a new string where trailing occurrences of any char in chars are removed. The chars argument is not a suffix; rather; all combinations of its values are stripped.
"abcdefcba".rstrip("abc") # => "abcdef"
Returns a new String with trailing whitespace removed.
" hello ".rstrip # => " hello"
"\tgoodbye\r\n".rstrip # => "\tgoodbye"
Returns a new string where trailing characters for which the block returns a truthy value are removed.
"bcadefcba".rstrip { |c| 'a' <= c <= 'c' } # => "bcadef"
Returns a new string with trailing occurrences of char removed.
"aaabcdaaa".rstrip('a') # => "aaabcd"
Searches the string for instances of pattern,
returning an Array of Regex::MatchData for each match.
Searches the string for instances of pattern,
yielding a Regex::MatchData for each match.
Searches the string for instances of pattern, yielding the matched string for each match.
Searches the string for instances of pattern, returning an array of the matched string for each match.
Returns a String where bytes that are invalid in the UTF-8 encoding are replaced with replacement.
Returns the number of unicode codepoints in this string.
"hello".size # => 5
"你好".size # => 2
Makes an Array by splitting the string on the given character separator
(and removing that character).
If limit is present, up to limit new strings will be created, with the entire remainder added to the last string.
If remove_empty is true, any empty strings are removed from the result.
"foo,,bar,baz".split(',') # => ["foo", "", "bar", "baz"]
"foo,,bar,baz".split(',', remove_empty: true) # => ["foo", "bar", "baz"]
"foo,bar,baz".split(',', 2) # => ["foo", "bar,baz"]
Splits the string after any amount of ASCII whitespace characters and yields each non-whitespace part to a block.
If limit is present, up to limit new strings will be created, with the entire remainder added to the last string.
ary = [] of String
old_pond = "
Old pond
a frog leaps in
water's sound
"
old_pond.split { |s| ary << s }
ary # => ["Old", "pond", "a", "frog", "leaps", "in", "water's", "sound"]
ary.clear
old_pond.split(3) { |s| ary << s }
ary # => ["Old", "pond", "a frog leaps in\n water's sound\n"]
Makes an array by splitting the string on any amount of ASCII whitespace characters (and removing that whitespace).
If limit is present, up to limit new strings will be created, with the entire remainder added to the last string.
old_pond = "
Old pond
a frog leaps in
water's sound
"
old_pond.split # => ["Old", "pond", "a", "frog", "leaps", "in", "water's", "sound"]
old_pond.split(3) # => ["Old", "pond", "a frog leaps in\n water's sound\n"]
Splits the string after each character separator and yields each part to a block.
If limit is present, up to limit new strings will be created, with the entire remainder added to the last string.
If remove_empty is true, any empty strings are not yielded.
ary = [] of String
"foo,,bar,baz".split(',') { |string| ary << string }
ary # => ["foo", "", "bar", "baz"]
ary.clear
"foo,,bar,baz".split(',', remove_empty: true) { |string| ary << string }
ary # => ["foo", "bar", "baz"]
ary.clear
"foo,bar,baz".split(',', 2) { |string| ary << string }
ary # => ["foo", "bar,baz"]
Splits the string after each string separator and yields each part to a block.
If limit is present, the array will be limited to limit items and the final item will contain the remainder of the string.
If separator is an empty string (""), the string will be separated into one-character strings.
If remove_empty is true, any empty strings are removed from the result.
ary = [] of String
long_river_name = "Mississippi"
long_river_name.split("ss") { |s| ary << s }
ary # => ["Mi", "i", "ippi"]
ary.clear
long_river_name.split("i") { |s| ary << s }
ary # => ["M", "ss", "ss", "pp", ""]
ary.clear
long_river_name.split("i", remove_empty: true) { |s| ary << s }
ary # => ["M", "ss", "ss", "pp"]
ary.clear
long_river_name.split("") { |s| ary << s }
ary # => ["M", "i", "s", "s", "i", "s", "s", "i", "p", "p", "i"]
Splits the string after each regex separator and yields each part to a block.
If limit is present, the array will be limited to limit items and the final item will contain the remainder of the string.
If separator is an empty regex (//), the string will be separated into one-character strings.
If remove_empty is true, any empty strings are removed from the result.
ary = [] of String
long_river_name = "Mississippi"
long_river_name.split(/s+/) { |s| ary << s }
ary # => ["Mi", "i", "ippi"]
ary.clear
long_river_name.split(//) { |s| ary << s }
ary # => ["M", "i", "s", "s", "i", "s", "s", "i", "p", "p", "i"]
Makes an Array by splitting the string on separator (and removing instances of separator).
If limit is present, the array will be limited to limit items and the final item will contain the remainder of the string.
If separator is an empty regex (//), the string will be separated into one-character strings.
If remove_empty is true, any empty strings are removed from the result.
long_river_name = "Mississippi"
long_river_name.split(/s+/) # => ["Mi", "i", "ippi"]
long_river_name.split(//) # => ["M", "i", "s", "s", "i", "s", "s", "i", "p", "p", "i"]
Makes an Array by splitting the string on separator (and removing instances of separator).
If limit is present, the array will be limited to limit items and the final item will contain the remainder of the string.
If separator is an empty string (""), the string will be separated into one-character strings.
If remove_empty is true, any empty strings are removed from the result.
long_river_name = "Mississippi"
long_river_name.split("ss") # => ["Mi", "i", "ippi"]
long_river_name.split("i") # => ["M", "ss", "ss", "pp", ""]
long_river_name.split("i", remove_empty: true) # => ["M", "ss", "ss", "pp"]
long_river_name.split("") # => ["M", "i", "s", "s", "i", "s", "s", "i", "p", "p", "i"]
Yields each char in this string to the block.
Returns a new String, that has all characters removed,
that were the same as the previous one and for which the given
block returned a truthy value.
"aaabbbccc".squeeze { |c| ['a', 'b'].includes?(c) } # => "abccc"
"aaabbbccc".squeeze { |c| ['a', 'c'].includes?(c) } # => "abbbc"
Returns a new String, with all runs of char replaced by one instance.
"a bbb".squeeze(' ') # => "a bbb"
Sets should be a list of strings following the rules
described at Char#in_set?. Returns a new String with all
runs of the same character replaced by one instance, if
they match the given set.
If no set is given, all characters are matched.
"aaabbbcccddd".squeeze("b-d") # => "aaabcd"
"a bbb".squeeze # => "a b"
Returns a new String, that has all characters removed,
that were the same as the previous one.
"a bbb".squeeze # => "a b"
Returns a new string where leading and trailing occurrences of any char in chars are removed. The chars argument is not a prefix or suffix; rather; all combinations of its values are stripped.
"abcdefcba".strip("abc") # => "def"
Returns a new String with leading and trailing whitespace removed.
" hello ".strip # => "hello"
"\tgoodbye\r\n".strip # => "goodbye"
Returns a new string where leading and trailing characters for which the block returns a truthy value are removed.
"bcadefcba".strip { |c| 'a' <= c <= 'c' } # => "def"
Returns a new string where leading and trailing occurrences of char are removed.
"aaabcdaaa".strip('a') # => "bcd"
Returns a new String with the character at the given index
replaced by replacement.
"hello".sub(1, "eee") # => "heeello"
Returns a String where the first char in the string matching a key in the
given hash is replaced by the corresponding hash value.
"hello".sub({'a' => 'b', 'l' => 'd'}) # => "hedlo"
Returns a new String with characters at the given range
replaced by replacement.
"hello".sub(1..2, "eee") # => "heeelo"
Returns a new String with characters at the given range
replaced by replacement.
"hello".sub(1..2, 'a') # => "halo"
Returns a String where the first occurrences of the given string is replaced
with the given replacement.
"hello yellow".sub("ll", "dd") # => "heddo yellow"
Returns a String where the first occurrence of pattern is replaced by
replacement
"hello".sub(/[aeiou]/, "*") # => "h*llo"
Within replacement, the special match variable $~ will not refer to the
current match.
If backreferences is true (the default value), replacement can include backreferences:
"hello".sub(/[aeiou]/, "(\\0)") # => "h(e)llo"
When substitution is performed, any backreferences found in replacement
will be replaced with the contents of the corresponding capture group in
pattern. Backreferences to capture groups that were not present in
pattern or that did not match will be skipped. See Regex for information
about capture groups.
Backreferences are expressed in the form "\\d", where d is a group
number, or "\\k<name>" where name is the name of a named capture group.
A sequence of literal characters resembling a backreference can be
expressed by placing "\\" before the sequence.
"foo".sub(/o/, "x\\0x") # => "fxoxo"
"foofoo".sub(/(?<bar>oo)/, "|\\k<bar>|") # => "f|oo|foo"
"foo".sub(/o/, "\\\\0") # => "f\\0o"
Raises ArgumentError if an incomplete named back-reference is present in
replacement.
Raises IndexError if a named group referenced in replacement is not present
in pattern.
Returns a String where the first occurrences of the given pattern is replaced
with the matching entry from the hash of replacements. If the first match
is not included in the hash, nothing is replaced.
"hello".sub(/(he|l|o)/, {"he": "ha", "l": "la"}) # => "hallo"
"hello".sub(/(he|l|o)/, {"l": "la"}) # => "hello"
Returns a String where the first occurrence of char is replaced by
replacement.
"hello".sub('l', "lo") # => "helolo"
"hello world".sub('o', 'a') # => "hella world"
Returns a new String with the character at the given index
replaced by replacement.
"hello".sub(1, 'a') # => "hallo"
Returns a new String where the first character is yielded to the given
block and replaced by its return value.
"hello".sub { |char| char + 1 } # => "iello"
"hello".sub { "hi" } # => "hiello"
Returns a String where the first occurrence of pattern is replaced by
the block's return value.
"hello".sub(/./) { |s| s[0].ord.to_s + ' ' } # => "104 ello"
Returns a String where the first occurrences of the given string is replaced
with the block's value.
"hello yellow".sub("ll") { "dd" } # => "heddo yellow"
Returns the successor of the string. The successor is calculated by incrementing characters starting from the rightmost alphanumeric (or the rightmost character if there are no alphanumerics) in the string. Incrementing a digit always results in another digit, and incrementing a letter results in another letter of the same case.
If the increment generates a "carry", the character to the left of it is incremented. This process repeats until there is no carry, adding an additional character if necessary.
"abcd".succ # => "abce"
"THX1138".succ # => "THX1139"
"((koala))".succ # => "((koalb))"
"1999zzz".succ # => "2000aaa"
"ZZZ9999".succ # => "AAAA0000"
"***".succ # => "**+"
Returns a BigInt from this string, in the given base.
Raises ArgumentError if this string doesn't denote a valid integer.
require "big"
"3a060dbf8d1a5ac3e67bc8f18843fc48".to_big_i(16)
Returns the result of interpreting characters in this string as a floating point number (Float64).
This method raises an exception if the string is not a valid float representation.
Options:
- whitespace: if
true, leading and trailing whitespaces are allowed - strict: if
true, extraneous characters past the end of the number are disallowed
"123.45e1".to_f # => 1234.5
"45.67 degrees".to_f # raises ArgumentError
"thx1138".to_f(strict: false) # raises ArgumentError
" 1.2".to_f(whitespace: false) # raises ArgumentError
"1.2foo".to_f(strict: false) # => 1.2
Same as #to_f but returns a Float32.
Same as #to_f? but returns a Float32.
Returns the result of interpreting characters in this string as a floating point number (Float64).
This method returns nil if the string is not a valid float representation.
Options:
- whitespace: if
true, leading and trailing whitespaces are allowed - strict: if
true, extraneous characters past the end of the number are disallowed
"123.45e1".to_f? # => 1234.5
"45.67 degrees".to_f? # => nil
"thx1138".to_f? # => nil
" 1.2".to_f?(whitespace: false) # => nil
"1.2foo".to_f?(strict: false) # => 1.2
Same as #to_i, but returns the block's value if there is not a valid number at the start
of this string, or if the resulting integer doesn't fit an Int32.
"12345".to_i { 0 } # => 12345
"hello".to_i { 0 } # => 0
Returns the result of interpreting leading characters in this string as an integer base base (between 2 and 36).
If there is not a valid number at the start of this string,
or if the resulting integer doesn't fit an Int32, an ArgumentError is raised.
Options:
- whitespace: if
true, leading and trailing whitespaces are allowed - underscore: if
true, underscores in numbers are allowed - prefix: if
true, the prefixes"0x","0o"and"0b"override the base - strict: if
true, extraneous characters past the end of the number are disallowed - leading_zero_is_octal: if
true, then a number prefixed with"0"will be treated as an octal
"12345".to_i # => 12345
"0a".to_i # raises ArgumentError
"hello".to_i # raises ArgumentError
"0a".to_i(16) # => 10
"1100101".to_i(2) # => 101
"1100101".to_i(8) # => 294977
"1100101".to_i(10) # => 1100101
"1100101".to_i(base: 16) # => 17826049
"12_345".to_i # raises ArgumentError
"12_345".to_i(underscore: true) # => 12345
" 12345 ".to_i # => 12345
" 12345 ".to_i(whitespace: false) # raises ArgumentError
"0x123abc".to_i # raises ArgumentError
"0x123abc".to_i(prefix: true) # => 1194684
"99 red balloons".to_i # raises ArgumentError
"99 red balloons".to_i(strict: false) # => 99
"0755".to_i # => 755
"0755".to_i(leading_zero_is_octal: true) # => 493
Same as #to_i.
Same as #to_i.
Same as #to_i.
Same as #to_i, but returns nil if there is not a valid number at the start
of this string, or if the resulting integer doesn't fit an Int32.
"12345".to_i? # => 12345
"99 red balloons".to_i? # => nil
"0a".to_i?(strict: false) # => 0
"hello".to_i? # => nil
Appends a short String representation of this object which includes its class name and its object address.
class Person
def initialize(@name : String, @age : Int32)
end
end
Person.new("John", 32).to_s # => #<Person:0x10a199f20>
Returns a string representation of this object.
Descendants must usually not override this method. Instead,
they must override #to_s(io), which must append to the given
IO object.
Returns the underlying bytes of this String in an unsafe way.
The returned slice is read-only.
Returns a pointer to the underlying bytes of this String.
Returns the UTF-16 encoding of the given string.
Invalid chars (in the range U+D800..U+DFFF) are encoded with the
unicode replacement char value 0xfffd.
The byte following the end of this slice (but not included in it) is defined
to be zero. This allows passing the result of this function into C functions
that expect a null-terminated UInt16*.
"hi 𐂥".to_utf16 # => Slice[104_u16, 105_u16, 32_u16, 55296_u16, 56485_u16]
Returns a new string translating characters using from and to as a
map. If to is shorter than from, the last character in to is used for
the rest. If to is empty, this acts like String#delete.
"aabbcc".tr("abc", "xyz") # => "xxyyzz"
"aabbcc".tr("abc", "x") # => "xxxxxx"
"aabbcc".tr("a", "xyz") # => "xxbbcc"
Converts camelcase boundaries to underscores.
"DoesWhatItSaysOnTheTin".underscore # => "does_what_it_says_on_the_tin"
"PartyInTheUSA".underscore # => "party_in_the_usa"
"HTTP_CLIENT".underscore # => "http_client"
"3.14IsPi".underscore # => "3.14_is_pi"
"InterestingImage".underscore(Unicode::CaseOptions::Turkic) # => "ınteresting_ımage"
Returns a new String with each lowercase letter replaced with its uppercase
counterpart.
"hEllO".upcase # => "HELLO"
Returns true if this String is encoded correctly
according to the UTF-8 encoding.