diff --git a/string.rb b/string.rb
index 941fda0c244b9f..7798e939e7613f 100644
--- a/string.rb
+++ b/string.rb
@@ -1,556 +1,556 @@
-# A +String+ object has an arbitrary sequence of bytes,
-# typically representing text or binary data.
-# A +String+ object may be created using String::new or as literals.
+# A +String+ object has an arbitrary sequence of bytes,
+# typically representing text or binary data.
+# A +String+ object may be created using String::new or as literals.
#
-# String objects differ from Symbol objects in that Symbol objects are
-# designed to be used as identifiers, instead of text or data.
+# String objects differ from Symbol objects in that Symbol objects are
+# designed to be used as identifiers, instead of text or data.
#
-# You can create a +String+ object explicitly with:
+# You can create a +String+ object explicitly with:
#
-# - A {string literal}[rdoc-ref:syntax/literals.rdoc@String+Literals].
-# - A {heredoc literal}[rdoc-ref:syntax/literals.rdoc@Here+Document+Literals].
+# - A {string literal}[rdoc-ref:syntax/literals.rdoc@String+Literals].
+# - A {heredoc literal}[rdoc-ref:syntax/literals.rdoc@Here+Document+Literals].
#
-# You can convert certain objects to Strings with:
+# You can convert certain objects to Strings with:
#
-# - \Method #String.
+# - \Method #String.
#
-# Some +String+ methods modify +self+.
-# Typically, a method whose name ends with ! modifies +self+
-# and returns +self+;
-# often a similarly named method (without the !)
-# returns a new string.
+# Some +String+ methods modify +self+.
+# Typically, a method whose name ends with ! modifies +self+
+# and returns +self+;
+# often, a similarly named method (without the !)
+# returns a new string.
#
-# In general, if there exist both bang and non-bang version of method,
-# the bang! mutates and the non-bang! does not.
-# However, a method without a bang can also mutate, such as String#replace.
+# In general, if both bang and non-bang versions of a method exist,
+# the bang method mutates and the non-bang method does not.
+# However, a method without a bang can also mutate, such as String#replace.
#
-# == Substitution Methods
+# == Substitution Methods
#
-# These methods perform substitutions:
+# These methods perform substitutions:
#
-# - String#sub: One substitution (or none); returns a new string.
-# - String#sub!: One substitution (or none); returns +self+ if any changes,
-# +nil+ otherwise.
-# - String#gsub: Zero or more substitutions; returns a new string.
-# - String#gsub!: Zero or more substitutions; returns +self+ if any changes,
-# +nil+ otherwise.
+# - String#sub: One substitution (or none); returns a new string.
+# - String#sub!: One substitution (or none); returns +self+ if any changes,
+# +nil+ otherwise.
+# - String#gsub: Zero or more substitutions; returns a new string.
+# - String#gsub!: Zero or more substitutions; returns +self+ if any changes,
+# +nil+ otherwise.
#
-# Each of these methods takes:
+# Each of these methods takes:
#
-# - A first argument, +pattern+ (string or regexp),
-# that specifies the substring(s) to be replaced.
+# - A first argument, +pattern+ (String or Regexp),
+# that specifies the substring(s) to be replaced.
#
-# - Either of these:
+# - Either of the following:
#
-# - A second argument, +replacement+ (string or hash),
-# that determines the replacing string.
-# - A block that will determine the replacing string.
+# - A second argument, +replacement+ (String or Hash),
+# that determines the replacing string.
+# - A block that will determine the replacing string.
#
-# The examples in this section mostly use methods String#sub and String#gsub;
-# the principles illustrated apply to all four substitution methods.
+# The examples in this section mostly use the String#sub and String#gsub methods;
+# the principles illustrated apply to all four substitution methods.
#
-# Argument +pattern+
+# Argument +pattern+
#
-# Argument +pattern+ is commonly a regular expression:
+# Argument +pattern+ is commonly a regular expression:
#
-# s = 'hello'
-# s.sub(/[aeiou]/, '*')# => "h*llo"
-# s.gsub(/[aeiou]/, '*') # => "h*ll*"
-# s.gsub(/[aeiou]/, '')# => "hll"
-# s.sub(/ell/, 'al') # => "halo"
-# s.gsub(/xyzzy/, '*') # => "hello"
-# 'THX1138'.gsub(/\d+/, '00') # => "THX00"
+# s = 'hello'
+# s.sub(/[aeiou]/, '*') # => "h*llo"
+# s.gsub(/[aeiou]/, '*') # => "h*ll*"
+# s.gsub(/[aeiou]/, '') # => "hll"
+# s.sub(/ell/, 'al') # => "halo"
+# s.gsub(/xyzzy/, '*') # => "hello"
+# 'THX1138'.gsub(/\d+/, '00') # => "THX00"
#
-# When +pattern+ is a string, all its characters are treated
-# as ordinary characters (not as regexp special characters):
+# When +pattern+ is a string, all its characters are treated
+# as ordinary characters (not as Regexp special characters):
#
-# 'THX1138'.gsub('\d+', '00') # => "THX1138"
+# 'THX1138'.gsub('\d+', '00') # => "THX1138"
#
-# +String+ +replacement+
+# +String+ +replacement+
#
-# If +replacement+ is a string, that string will determine
-# the replacing string that is to be substituted for the matched text.
+# If +replacement+ is a string, that string determines
+# the replacing string that is substituted for the matched text.
#
-# Each of the examples above uses a simple string as the replacing string.
+# Each of the examples above uses a simple string as the replacing string.
#
-# +String+ +replacement+ may contain back-references to the pattern's captures:
+# +String+ +replacement+ may contain back-references to the pattern's captures:
#
-# - \n (_n_ a non-negative integer) refers to $n.
-# - \k refers to the named capture +name+.
+# - \n (_n_ is a non-negative integer) refers to $n.
+# - \k refers to the named capture +name+.
#
-# See Regexp for details.
+# See Regexp for details.
#
-# Note that within the string +replacement+, a character combination
-# such as $& is treated as ordinary text, and not as
-# a special match variable.
-# However, you may refer to some special match variables using these
-# combinations:
+# Note that within the string +replacement+, a character combination
+# such as $& is treated as ordinary text, not as
+# a special match variable.
+# However, you may refer to some special match variables using these
+# combinations:
#
-# - \& and \0 correspond to $&,
-# which contains the complete matched text.
-# - \' corresponds to $',
-# which contains string after match.
-# - \` corresponds to $`,
-# which contains string before match.
-# - \\+ corresponds to $+,
-# which contains last capture group.
+# - \& and \0 correspond to $&,
+# which contains the complete matched text.
+# - \' corresponds to $',
+# which contains the string after the match.
+# - \` corresponds to $`,
+# which contains the string before the match.
+# - \\+ corresponds to $+,
+# which contains the last capture group.
#
-# See Regexp for details.
+# See Regexp for details.
#
-# Note that \\\\ is interpreted as an escape, i.e., a single backslash.
+# Note that \\\\ is interpreted as an escape, i.e., a single backslash.
#
-# Note also that a string literal consumes backslashes.
-# See {String Literals}[rdoc-ref:syntax/literals.rdoc@String+Literals] for details about string literals.
+# Note also that a string literal consumes backslashes.
+# See {String Literals}[rdoc-ref:syntax/literals.rdoc@String+Literals] for details about string literals.
#
-# A back-reference is typically preceded by an additional backslash.
-# For example, if you want to write a back-reference \& in
-# +replacement+ with a double-quoted string literal, you need to write
-# "..\\\\&..".
+# A back-reference is typically preceded by an additional backslash.
+# For example, if you want to write a back-reference \& in
+# +replacement+ with a double-quoted string literal, you need to write
+# "..\\\\&..".
#
-# If you want to write a non-back-reference string \& in
-# +replacement+, you need first to escape the backslash to prevent
-# this method from interpreting it as a back-reference, and then you
-# need to escape the backslashes again to prevent a string literal from
-# consuming them: "..\\\\\\\\&..".
+# If you want to write a non-back-reference string \& in
+# +replacement+, you need to first escape the backslash to prevent
+# this method from interpreting it as a back-reference, and then you
+# need to escape the backslashes again to prevent a string literal from
+# consuming them: "..\\\\\\\\&..".
#
-# You may want to use the block form to avoid a lot of backslashes.
+# You may want to use the block form to avoid excessive backslashes.
#
-# \Hash +replacement+
+# \Hash +replacement+
#
-# If argument +replacement+ is a hash, and +pattern+ matches one of its keys,
-# the replacing string is the value for that key:
+# If the argument +replacement+ is a hash, and +pattern+ matches one of its keys,
+# the replacing string is the value for that key:
#
-# h = {'foo' => 'bar', 'baz' => 'bat'}
-# 'food'.sub('foo', h) # => "bard"
+# h = {'foo' => 'bar', 'baz' => 'bat'}
+# 'food'.sub('foo', h) # => "bard"
#
-# Note that a symbol key does not match:
+# Note that a symbol key does not match:
#
-# h = {foo: 'bar', baz: 'bat'}
-# 'food'.sub('foo', h) # => "d"
+# h = {foo: 'bar', baz: 'bat'}
+# 'food'.sub('foo', h) # => "d"
#
-# Block
+# Block
#
-# In the block form, the current match string is passed to the block;
-# the block's return value becomes the replacing string:
+# In the block form, the current match string is passed to the block;
+# the block's return value becomes the replacing string:
#
-# s = '@'
-# '1234'.gsub(/\d/) {|match| s.succ! } # => "ABCD"
+# s = '@'
+# '1234'.gsub(/\d/) { |match| s.succ! } # => "ABCD"
#
-# Special match variables such as $1, $2, $`,
-# $&, and $' are set appropriately.
+# Special match variables such as $1, $2, $`,
+# $&, and $' are set appropriately.
#
-# == Whitespace in Strings
+# == Whitespace in Strings
#
-# In class +String+, _whitespace_ is defined as a contiguous sequence of characters
-# consisting of any mixture of the following:
+# In the class +String+, _whitespace_ is defined as a contiguous sequence of characters
+# consisting of any mixture of the following:
#
-# - NL (null): "\x00", "\u0000".
-# - HT (horizontal tab): "\x09", "\t".
-# - LF (line feed): "\x0a", "\n".
-# - VT (vertical tab): "\x0b", "\v".
-# - FF (form feed): "\x0c", "\f".
-# - CR (carriage return): "\x0d", "\r".
-# - SP (space): "\x20", " ".
+# - NL (null): "\x00", "\u0000".
+# - HT (horizontal tab): "\x09", "\t".
+# - LF (line feed): "\x0a", "\n".
+# - VT (vertical tab): "\x0b", "\v".
+# - FF (form feed): "\x0c", "\f".
+# - CR (carriage return): "\x0d", "\r".
+# - SP (space): "\x20", " ".
#
#
-# Whitespace is relevant for these methods:
+# Whitespace is relevant for the following methods:
#
-# - #lstrip, #lstrip!: strip leading whitespace.
-# - #rstrip, #rstrip!: strip trailing whitespace.
-# - #strip, #strip!: strip leading and trailing whitespace.
+# - #lstrip, #lstrip!: Strip leading whitespace.
+# - #rstrip, #rstrip!: Strip trailing whitespace.
+# - #strip, #strip!: Strip leading and trailing whitespace.
#
-# == +String+ Slices
+# == +String+ Slices
#
-# A _slice_ of a string is a substring that is selected by certain criteria.
+# A _slice_ of a string is a substring selected by certain criteria.
#
-# These instance methods make use of slicing:
+# These instance methods utilize slicing:
#
-# - String#[] (aliased as String#slice): returns a slice copied from +self+.
-# - String#[]=: returns a copy of +self+ with a slice replaced.
-# - String#slice!: returns +self+ with a slice removed.
+# - String#[] (aliased as String#slice): Returns a slice copied from +self+.
+# - String#[]=: Returns a copy of +self+ with a slice replaced.
+# - String#slice!: Returns +self+ with a slice removed.
#
-# Each of the above methods takes arguments that determine the slice
-# to be copied or replaced.
+# Each of the above methods takes arguments that determine the slice
+# to be copied or replaced.
#
-# The arguments have several forms.
-# For string +string+, the forms are:
+# The arguments have several forms.
+# For a string +string+, the forms are:
#
-# - string[index].
-# - string[start, length].
-# - string[range].
-# - string[regexp, capture = 0].
-# - string[substring].
+# - string[index]
+# - string[start, length]
+# - string[range]
+# - string[regexp, capture = 0]
+# - string[substring]
#
-# string[index]
+# string[index]
#
-# When non-negative integer argument +index+ is given,
-# the slice is the 1-character substring found in +self+ at character offset +index+:
+# When a non-negative integer argument +index+ is given,
+# the slice is the 1-character substring found in +self+ at character offset +index+:
#
-# 'bar'[0] # => "b"
-# 'bar'[2] # => "r"
-# 'bar'[20] # => nil
-# 'тест'[2] # => "с"
-# 'こんにちは'[4] # => "は"
+# 'bar'[0] # => "b"
+# 'bar'[2] # => "r"
+# 'bar'[20] # => nil
+# 'тест'[2] # => "с"
+# 'こんにちは'[4] # => "は"
#
-# When negative integer +index+ is given,
-# the slice begins at the offset given by counting backward from the end of +self+:
+# When a negative integer +index+ is given,
+# the slice begins at the offset given by counting backward from the end of +self+:
#
-# 'bar'[-3] # => "b"
-# 'bar'[-1] # => "r"
-# 'bar'[-20] # => nil
+# 'bar'[-3] # => "b"
+# 'bar'[-1] # => "r"
+# 'bar'[-20] # => nil
#
-# string[start, length]
+# string[start, length]
#
-# When non-negative integer arguments +start+ and +length+ are given,
-# the slice begins at character offset +start+, if it exists,
-# and continues for +length+ characters, if available:
+# When non-negative integer arguments +start+ and +length+ are given,
+# the slice begins at character offset +start+, if it exists,
+# and continues for +length+ characters, if available:
#
-# 'foo'[0, 2] # => "fo"
-# 'тест'[1, 2] # => "ес"
-# 'こんにちは'[2, 2] # => "にち"
-# # Zero length.
-# 'foo'[2, 0] # => ""
-# # Length not entirely available.
-# 'foo'[1, 200] # => "oo"
-# # Start out of range.
-# 'foo'[4, 2] # => nil
+# 'foo'[0, 2] # => "fo"
+# 'тест'[1, 2] # => "ес"
+# 'こんにちは'[2, 2] # => "にち"
+# # Zero length.
+# 'foo'[2, 0] # => ""
+# # Length not entirely available.
+# 'foo'[1, 200] # => "oo"
+# # Start out of range.
+# 'foo'[4, 2] # => nil
#
-# Special case: if +start+ is equal to the length of +self+,
-# the slice is a new empty string:
+# Special case: if +start+ equals the length of +self+,
+# the slice is a new empty string:
#
-# 'foo'[3, 2] # => ""
-# 'foo'[3, 200] # => ""
+# 'foo'[3, 2] # => ""
+# 'foo'[3, 200] # => ""
#
-# When negative +start+ and non-negative +length+ are given,
-# the slice beginning is determined by counting backward from the end of +self+,
-# and the slice continues for +length+ characters, if available:
+# When a negative +start+ and non-negative +length+ are given,
+# the slice begins by counting backward from the end of +self+,
+# and continues for +length+ characters, if available:
#
-# 'foo'[-2, 2] # => "oo"
-# 'foo'[-2, 200] # => "oo"
-# # Start out of range.
-# 'foo'[-4, 2] # => nil
+# 'foo'[-2, 2] # => "oo"
+# 'foo'[-2, 200] # => "oo"
+# # Start out of range.
+# 'foo'[-4, 2] # => nil
#
-# When negative +length+ is given, there is no slice:
+# When a negative +length+ is given, there is no slice:
#
-# 'foo'[1, -1] # => nil
-# 'foo'[-2, -1] # => nil
+# 'foo'[1, -1] # => nil
+# 'foo'[-2, -1] # => nil
#
-# string[range]
+# string[range]
#
-# When Range argument +range+ is given,
-# creates a substring of +string+ using the indices in +range+.
-# The slice is then determined as above:
+# When a Range argument +range+ is given,
+# it creates a substring of +string+ using the indices in +range+.
+# The slice is then determined as above:
#
-# 'foo'[0..1] # => "fo"
-# 'foo'[0, 2] # => "fo"
+# 'foo'[0..1] # => "fo"
+# 'foo'[0, 2] # => "fo"
#
-# 'foo'[2...2] # => ""
-# 'foo'[2, 0] # => ""
+# 'foo'[2...2] # => ""
+# 'foo'[2, 0] # => ""
#
-# 'foo'[1..200] # => "oo"
-# 'foo'[1, 200] # => "oo"
+# 'foo'[1..200] # => "oo"
+# 'foo'[1, 200] # => "oo"
#
-# 'foo'[4..5] # => nil
-# 'foo'[4, 2] # => nil
+# 'foo'[4..5] # => nil
+# 'foo'[4, 2] # => nil
#
-# 'foo'[-4..-3] # => nil
-# 'foo'[-4, 2] # => nil
+# 'foo'[-4..-3] # => nil
+# 'foo'[-4, 2] # => nil
#
-# 'foo'[3..4] # => ""
-# 'foo'[3, 2] # => ""
+# 'foo'[3..4] # => ""
+# 'foo'[3, 2] # => ""
#
-# 'foo'[-2..-1] # => "oo"
-# 'foo'[-2, 2] # => "oo"
+# 'foo'[-2..-1] # => "oo"
+# 'foo'[-2, 2] # => "oo"
#
-# 'foo'[-2..197] # => "oo"
-# 'foo'[-2, 200] # => "oo"
+# 'foo'[-2..197] # => "oo"
+# 'foo'[-2, 200] # => "oo"
#
-# string[regexp, capture = 0]
+# string[regexp, capture = 0]
#
-# When the Regexp argument +regexp+ is given,
-# and the +capture+ argument is 0,
-# the slice is the first matching substring found in +self+:
+# When the Regexp argument +regexp+ is given,
+# and the +capture+ argument is 0,
+# the slice is the first matching substring found in +self+:
#
-# 'foo'[/o/] # => "o"
-# 'foo'[/x/] # => nil
-# s = 'hello there'
-# s[/[aeiou](.)\1/] # => "ell"
-# s[/[aeiou](.)\1/, 0] # => "ell"
+# 'foo'[/o/] # => "o"
+# 'foo'[/x/] # => nil
+# s = 'hello there'
+# s[/[aeiou](.)\1/] # => "ell"
+# s[/[aeiou](.)\1/, 0] # => "ell"
#
-# If argument +capture+ is given and not 0,
-# it should be either an capture group index (integer)
-# or a capture group name (string or symbol);
-# the slice is the specified capture (see Regexp@Groups+and+Captures):
+# If the argument +capture+ is provided and not 0,
+# it should be either a capture group index (integer)
+# or a capture group name (String or Symbol);
+# the slice is the specified capture (see Regexp@Groups and Captures):
#
-# s = 'hello there'
-# s[/[aeiou](.)\1/, 1] # => "l"
-# s[/(?[aeiou])(?[^aeiou])/, "non_vowel"] # => "l"
-# s[/(?[aeiou])(?[^aeiou])/, :vowel] # => "e"
+# s = 'hello there'
+# s[/[aeiou](.)\1/, 1] # => "l"
+# s[/(?[aeiou])(?[^aeiou])/, "non_vowel"] # => "l"
+# s[/(?[aeiou])(?[^aeiou])/, :vowel] # => "e"
#
-# If an invalid capture group index is given, there is no slice.
-# If an invalid capture group name is given, +IndexError+ is raised.
+# If an invalid capture group index is given, there is no slice.
+# If an invalid capture group name is given, +IndexError+ is raised.
#
-# string[substring]
+# string[substring]
#
-# When the single +String+ argument +substring+ is given,
-# returns the substring from +self+ if found, otherwise +nil+:
+# When the single +String+ argument +substring+ is given,
+# it returns the substring from +self+ if found, otherwise +nil+:
#
-# 'foo'['oo'] # => "oo"
-# 'foo'['xx'] # => nil
+# 'foo'['oo'] # => "oo"
+# 'foo'['xx'] # => nil
#
-# == What's Here
+# == What's Here
#
-# First, what's elsewhere. \Class +String+:
+# First, what's elsewhere. \Class +String+:
#
-# - Inherits from {class Object}[rdoc-ref:Object@What-27s+Here].
-# - Includes {module Comparable}[rdoc-ref:Comparable@What-27s+Here].
+# - Inherits the {Object class}[rdoc-ref:Object@What-27s+Here].
+# - Includes the {Comparable module}[rdoc-ref:Comparable@What-27s+Here].
#
-# Here, class +String+ provides methods that are useful for:
+# Here, class +String+ provides methods that are useful for:
#
-# - {Creating a String}[rdoc-ref:String@Methods+for+Creating+a+String]
-# - {Frozen/Unfrozen Strings}[rdoc-ref:String@Methods+for+a+Frozen-2FUnfrozen+String]
-# - {Querying}[rdoc-ref:String@Methods+for+Querying]
-# - {Comparing}[rdoc-ref:String@Methods+for+Comparing]
-# - {Modifying a String}[rdoc-ref:String@Methods+for+Modifying+a+String]
-# - {Converting to New String}[rdoc-ref:String@Methods+for+Converting+to+New+String]
-# - {Converting to Non-String}[rdoc-ref:String@Methods+for+Converting+to+Non-String]
-# - {Iterating}[rdoc-ref:String@Methods+for+Iterating]
+# - {Creating a String}[rdoc-ref:String@Methods+for+Creating+a+String]
+# - {Frozen/Unfrozen Strings}[rdoc-ref:String@Methods+for+a+Frozen-2FUnfrozen+String]
+# - {Querying}[rdoc-ref:String@Methods+for+Querying]
+# - {Comparing}[rdoc-ref:String@Methods+for+Comparing]
+# - {Modifying a String}[rdoc-ref:String@Methods+for+Modifying+a+String]
+# - {Converting to New String}[rdoc-ref:String@Methods+for+Converting+to+New+String]
+# - {Converting to Non-String}[rdoc-ref:String@Methods+for+Converting+to+Non-String]
+# - {Iterating}[rdoc-ref:String@Methods+for+Iterating]
#
-# === Methods for Creating a +String+
+# === Methods for Creating a +String+
#
-# - ::new: Returns a new string.
-# - ::try_convert: Returns a new string created from a given object.
+# - ::new: Returns a new string.
+# - ::try_convert: Returns a new string created from a given object.
#
-# === Methods for a Frozen/Unfrozen String
+# === Methods for a Frozen/Unfrozen String
#
-# - #+@: Returns a string that is not frozen: +self+, if not frozen;
-# +self.dup+ otherwise.
-# - #-@ (aliased as #dedup): Returns a string that is frozen: +self+, if already frozen;
-# +self.freeze+ otherwise.
-# - #freeze: Freezes +self+, if not already frozen; returns +self+.
+# - #+@: Returns a string that is not frozen: +self+ if not frozen;
+# +self.dup+ otherwise.
+# - #-@ (aliased as #dedup): Returns a string that is frozen: +self+ if already frozen;
+# +self.freeze+ otherwise.
+# - #freeze: Freezes +self+ if not already frozen; returns +self+.
#
-# === Methods for Querying
+# === Methods for Querying
#
-# _Counts_
+# _Counts_
#
-# - #length (aliased as #size): Returns the count of characters (not bytes).
-# - #empty?: Returns +true+ if +self.length+ is zero; +false+ otherwise.
-# - #bytesize: Returns the count of bytes.
-# - #count: Returns the count of substrings matching given strings.
+# - #length (aliased as #size): Returns the count of characters (not bytes).
+# - #empty?: Returns +true+ if +self.length+ is zero; +false+ otherwise.
+# - #bytesize: Returns the count of bytes.
+# - #count: Returns the count of substrings matching given strings.
#
-# _Substrings_
+# _Substrings_
#
-# - #=~: Returns the index of the first substring that matches a given
-# Regexp or other object; returns +nil+ if no match is found.
-# - #index: Returns the index of the _first_ occurrence of a given substring;
-# returns +nil+ if none found.
-# - #rindex: Returns the index of the _last_ occurrence of a given substring;
-# returns +nil+ if none found.
-# - #include?: Returns +true+ if the string contains a given substring; +false+ otherwise.
-# - #match: Returns a MatchData object if the string matches a given Regexp; +nil+ otherwise.
-# - #match?: Returns +true+ if the string matches a given Regexp; +false+ otherwise.
-# - #start_with?: Returns +true+ if the string begins with any of the given substrings.
-# - #end_with?: Returns +true+ if the string ends with any of the given substrings.
+# - #=~: Returns the index of the first substring that matches a given
+# Regexp or other object; returns +nil+ if no match is found.
+# - #index: Returns the index of the _first_ occurrence of a given substring;
+# returns +nil+ if none found.
+# - #rindex: Returns the index of the _last_ occurrence of a given substring;
+# returns +nil+ if none found.
+# - #include?: Returns +true+ if the string contains a given substring; +false+ otherwise.
+# - #match: Returns a MatchData object if the string matches a given Regexp; +nil+ otherwise.
+# - #match?: Returns +true+ if the string matches a given Regexp; +false+ otherwise.
+# - #start_with?: Returns +true+ if the string begins with any of the given substrings.
+# - #end_with?: Returns +true+ if the string ends with any of the given substrings.
#
-# _Encodings_
+# _Encodings_
#
-# - #encoding\: Returns the Encoding object that represents the encoding of the string.
-# - #unicode_normalized?: Returns +true+ if the string is in Unicode normalized form; +false+ otherwise.
-# - #valid_encoding?: Returns +true+ if the string contains only characters that are valid
-# for its encoding.
-# - #ascii_only?: Returns +true+ if the string has only ASCII characters; +false+ otherwise.
+# - #encoding\: Returns the Encoding object that represents the encoding of the string.
+# - #unicode_normalized?: Returns +true+ if the string is in Unicode normalized form; +false+ otherwise.
+# - #valid_encoding?: Returns +true+ if the string contains only characters that are valid
+# for its encoding.
+# - #ascii_only?: Returns +true+ if the string has only ASCII characters; +false+ otherwise.
#
-# _Other_
+# _Other_
#
-# - #sum: Returns a basic checksum for the string: the sum of each byte.
-# - #hash: Returns the integer hash code.
-#
-# === Methods for Comparing
-#
-# - #== (aliased as #===): Returns +true+ if a given other string has the same content as +self+.
-# - #eql?: Returns +true+ if the content is the same as the given other string.
-# - #<=>: Returns -1, 0, or 1 as a given other string is smaller than,
-# equal to, or larger than +self+.
-# - #casecmp: Ignoring case, returns -1, 0, or 1 as a given
-# other string is smaller than, equal to, or larger than +self+.
-# - #casecmp?: Returns +true+ if the string is equal to a given string after Unicode case folding;
-# +false+ otherwise.
-#
-# === Methods for Modifying a +String+
-#
-# Each of these methods modifies +self+.
-#
-# _Insertion_
-#
-# - #insert: Returns +self+ with a given string inserted at a given offset.
-# - #<<: Returns +self+ concatenated with a given string or integer.
-# - #append_as_bytes: Returns +self+ concatenated with strings without performing any
-# encoding validation or conversion.
-#
-# _Substitution_
-#
-# - #sub!: Replaces the first substring that matches a given pattern with a given replacement string;
-# returns +self+ if any changes, +nil+ otherwise.
-# - #gsub!: Replaces each substring that matches a given pattern with a given replacement string;
-# returns +self+ if any changes, +nil+ otherwise.
-# - #succ! (aliased as #next!): Returns +self+ modified to become its own successor.
-# - #initialize_copy (aliased as #replace): Returns +self+ with its entire content replaced by a given string.
-# - #reverse!: Returns +self+ with its characters in reverse order.
-# - #setbyte: Sets the byte at a given integer offset to a given value; returns the argument.
-# - #tr!: Replaces specified characters in +self+ with specified replacement characters;
-# returns +self+ if any changes, +nil+ otherwise.
-# - #tr_s!: Replaces specified characters in +self+ with specified replacement characters,
-# removing duplicates from the substrings that were modified;
-# returns +self+ if any changes, +nil+ otherwise.
-#
-# _Casing_
-#
-# - #capitalize!: Upcases the initial character and downcases all others;
-# returns +self+ if any changes, +nil+ otherwise.
-# - #downcase!: Downcases all characters; returns +self+ if any changes, +nil+ otherwise.
-# - #upcase!: Upcases all characters; returns +self+ if any changes, +nil+ otherwise.
-# - #swapcase!: Upcases each downcase character and downcases each upcase character;
-# returns +self+ if any changes, +nil+ otherwise.
-#
-# _Encoding_
-#
-# - #encode!: Returns +self+ with all characters transcoded from one given encoding into another.
-# - #unicode_normalize!: Unicode-normalizes +self+; returns +self+.
-# - #scrub!: Replaces each invalid byte with a given character; returns +self+.
-# - #force_encoding: Changes the encoding to a given encoding; returns +self+.
-#
-# _Deletion_
-#
-# - #clear: Removes all content, so that +self+ is empty; returns +self+.
-# - #slice!, #[]=: Removes a substring determined by a given index, start/length, range, regexp, or substring.
-# - #squeeze!: Removes contiguous duplicate characters; returns +self+.
-# - #delete!: Removes characters as determined by the intersection of substring arguments.
-# - #lstrip!: Removes leading whitespace; returns +self+ if any changes, +nil+ otherwise.
-# - #rstrip!: Removes trailing whitespace; returns +self+ if any changes, +nil+ otherwise.
-# - #strip!: Removes leading and trailing whitespace; returns +self+ if any changes, +nil+ otherwise.
-# - #chomp!: Removes trailing record separator, if found; returns +self+ if any changes, +nil+ otherwise.
-# - #chop!: Removes trailing newline characters if found; otherwise removes the last character;
-# returns +self+ if any changes, +nil+ otherwise.
-#
-# === Methods for Converting to New +String+
-#
-# Each of these methods returns a new +String+ based on +self+,
-# often just a modified copy of +self+.
-#
-# _Extension_
-#
-# - #*: Returns the concatenation of multiple copies of +self+,
-# - #+: Returns the concatenation of +self+ and a given other string.
-# - #center: Returns a copy of +self+ centered between pad substring.
-# - #concat: Returns the concatenation of +self+ with given other strings.
-# - #prepend: Returns the concatenation of a given other string with +self+.
-# - #ljust: Returns a copy of +self+ of a given length, right-padded with a given other string.
-# - #rjust: Returns a copy of +self+ of a given length, left-padded with a given other string.
-#
-# _Encoding_
-#
-# - #b: Returns a copy of +self+ with ASCII-8BIT encoding.
-# - #scrub: Returns a copy of +self+ with each invalid byte replaced with a given character.
-# - #unicode_normalize: Returns a copy of +self+ with each character Unicode-normalized.
-# - #encode: Returns a copy of +self+ with all characters transcoded from one given encoding into another.
-#
-# _Substitution_
-#
-# - #dump: Returns a copy of +self+ with all non-printing characters replaced by \xHH notation
-# and all special characters escaped.
-# - #undump: Returns a copy of +self+ with all \xNN notation replace by \uNNNN notation
-# and all escaped characters unescaped.
-# - #sub: Returns a copy of +self+ with the first substring matching a given pattern
-# replaced with a given replacement string;.
-# - #gsub: Returns a copy of +self+ with each substring that matches a given pattern
-# replaced with a given replacement string.
-# - #succ (aliased as #next): Returns the string that is the successor to +self+.
-# - #reverse: Returns a copy of +self+ with its characters in reverse order.
-# - #tr: Returns a copy of +self+ with specified characters replaced with specified replacement characters.
-# - #tr_s: Returns a copy of +self+ with specified characters replaced with
-# specified replacement characters,
-# removing duplicates from the substrings that were modified.
-# - #%: Returns the string resulting from formatting a given object into +self+
-#
-# _Casing_
-#
-# - #capitalize: Returns a copy of +self+ with the first character upcased
-# and all other characters downcased.
-# - #downcase: Returns a copy of +self+ with all characters downcased.
-# - #upcase: Returns a copy of +self+ with all characters upcased.
-# - #swapcase: Returns a copy of +self+ with all upcase characters downcased
-# and all downcase characters upcased.
-#
-# _Deletion_
-#
-# - #delete: Returns a copy of +self+ with characters removed
-# - #delete_prefix: Returns a copy of +self+ with a given prefix removed.
-# - #delete_suffix: Returns a copy of +self+ with a given suffix removed.
-# - #lstrip: Returns a copy of +self+ with leading whitespace removed.
-# - #rstrip: Returns a copy of +self+ with trailing whitespace removed.
-# - #strip: Returns a copy of +self+ with leading and trailing whitespace removed.
-# - #chomp: Returns a copy of +self+ with a trailing record separator removed, if found.
-# - #chop: Returns a copy of +self+ with trailing newline characters or the last character removed.
-# - #squeeze: Returns a copy of +self+ with contiguous duplicate characters removed.
-# - #[] (aliased as #slice): Returns a substring determined by a given index, start/length, or range, or string.
-# - #byteslice: Returns a substring determined by a given index, start/length, or range.
-# - #chr: Returns the first character.
-#
-# _Duplication_
-#
-# - #to_s (aliased as #to_str): If +self+ is a subclass of +String+, returns +self+ copied into a +String+;
-# otherwise, returns +self+.
-#
-# === Methods for Converting to Non-+String+
-#
-# Each of these methods converts the contents of +self+ to a non-+String+.
-#
-# Characters, Bytes, and Clusters
-#
-# - #bytes: Returns an array of the bytes in +self+.
-# - #chars: Returns an array of the characters in +self+.
-# - #codepoints: Returns an array of the integer ordinals in +self+.
-# - #getbyte: Returns an integer byte as determined by a given index.
-# - #grapheme_clusters: Returns an array of the grapheme clusters in +self+.
-#
-# _Splitting_
-#
-# - #lines: Returns an array of the lines in +self+, as determined by a given record separator.
-# - #partition: Returns a 3-element array determined by the first substring that matches
-# a given substring or regexp,
-# - #rpartition: Returns a 3-element array determined by the last substring that matches
-# a given substring or regexp,
-# - #split: Returns an array of substrings determined by a given delimiter -- regexp or string --
-# or, if a block given, passes those substrings to the block.
-#
-# _Matching_
-#
-# - #scan: Returns an array of substrings matching a given regexp or string, or,
-# if a block given, passes each matching substring to the block.
-# - #unpack: Returns an array of substrings extracted from +self+ according to a given format.
-# - #unpack1: Returns the first substring extracted from +self+ according to a given format.
-#
-# _Numerics_
-#
-# - #hex: Returns the integer value of the leading characters, interpreted as hexadecimal digits.
-# - #oct: Returns the integer value of the leading characters, interpreted as octal digits.
-# - #ord: Returns the integer ordinal of the first character in +self+.
-# - #to_i: Returns the integer value of leading characters, interpreted as an integer.
-# - #to_f: Returns the floating-point value of leading characters, interpreted as a floating-point number.
-#
-# Strings and Symbols
-#
-# - #inspect: Returns copy of +self+, enclosed in double-quotes, with special characters escaped.
-# - #intern (aliased as #to_sym): Returns the symbol corresponding to +self+.
-#
-# === Methods for Iterating
-#
-# - #each_byte: Calls the given block with each successive byte in +self+.
-# - #each_char: Calls the given block with each successive character in +self+.
-# - #each_codepoint: Calls the given block with each successive integer codepoint in +self+.
-# - #each_grapheme_cluster: Calls the given block with each successive grapheme cluster in +self+.
-# - #each_line: Calls the given block with each successive line in +self+,
-# as determined by a given record separator.
-# - #upto: Calls the given block with each string value returned by successive calls to #succ.
+# - #sum: Returns a basic checksum for the string: the sum of each byte.
+# - #hash: Returns the integer hash code.
+#
+# === Methods for Comparing
+#
+# - #== (aliased as #===): Returns +true+ if a given other string has the same content as +self+.
+# - #eql?: Returns +true+ if the content is the same as the given other string.
+# - #<=>: Returns -1, 0, or 1 as a given other string is smaller than,
+# equal to, or larger than +self+.
+# - #casecmp: Ignoring case, returns -1, 0, or 1 as a given
+# other string is smaller than, equal to, or larger than +self+.
+# - #casecmp?: Returns +true+ if the string is equal to a given string after Unicode case folding;
+# +false+ otherwise.
+#
+# === Methods for Modifying a +String+
+#
+# Each of these methods modifies +self+.
+#
+# _Insertion_
+#
+# - #insert: Returns +self+ with a given string inserted at a specified offset.
+# - #<<: Returns +self+ concatenated with a given string or integer.
+# - #append_as_bytes: Returns +self+ concatenated with strings without performing any
+# encoding validation or conversion.
+#
+# _Substitution_
+#
+# - #sub!: Replaces the first substring that matches a given pattern with a given replacement string;
+# returns +self+ if any changes, +nil+ otherwise.
+# - #gsub!: Replaces each substring that matches a given pattern with a given replacement string;
+# returns +self+ if any changes, +nil+ otherwise.
+# - #succ! (aliased as #next!): Returns +self+ modified to become its own successor.
+# - #initialize_copy (aliased as #replace): Returns +self+ with its entire content replaced by a given string.
+# - #reverse!: Returns +self+ with its characters in reverse order.
+# - #setbyte: Sets the byte at a given integer offset to a given value; returns the argument.
+# - #tr!: Replaces specified characters in +self+ with specified replacement characters;
+# returns +self+ if any changes, +nil+ otherwise.
+# - #tr_s!: Replaces specified characters in +self+ with specified replacement characters,
+# removing duplicates from the substrings that were modified;
+# returns +self+ if any changes, +nil+ otherwise.
+#
+# _Casing_
+#
+# - #capitalize!: Upcases the initial character and downcases all others;
+# returns +self+ if any changes, +nil+ otherwise.
+# - #downcase!: Downcases all characters; returns +self+ if any changes, +nil+ otherwise.
+# - #upcase!: Upcases all characters; returns +self+ if any changes, +nil+ otherwise.
+# - #swapcase!: Upcases each downcase character and downcases each upcase character;
+# returns +self+ if any changes, +nil+ otherwise.
+#
+# _Encoding_
+#
+# - #encode!: Returns +self+ with all characters transcoded from one encoding to another.
+# - #unicode_normalize!: Unicode-normalizes +self+; returns +self+.
+# - #scrub!: Replaces each invalid byte with a given character; returns +self+.
+# - #force_encoding: Changes the encoding to a given encoding; returns +self+.
+#
+# _Deletion_
+#
+# - #clear: Removes all content, so that +self+ is empty; returns +self+.
+# - #slice!, #[]=: Removes a substring determined by a given index, start/length, range, regexp, or substring.
+# - #squeeze!: Removes contiguous duplicate characters; returns +self+.
+# - #delete!: Removes characters as determined by the intersection of substring arguments.
+# - #lstrip!: Removes leading whitespace; returns +self+ if any changes, +nil+ otherwise.
+# - #rstrip!: Removes trailing whitespace; returns +self+ if any changes, +nil+ otherwise.
+# - #strip!: Removes leading and trailing whitespace; returns +self+ if any changes, +nil+ otherwise.
+# - #chomp!: Removes the trailing record separator, if found; returns +self+ if any changes, +nil+ otherwise.
+# - #chop!: Removes trailing newline characters if found; otherwise removes the last character;
+# returns +self+ if any changes, +nil+ otherwise.
+#
+# === Methods for Converting to New +String+
+#
+# Each of these methods returns a new +String+ based on +self+,
+# often just a modified copy of +self+.
+#
+# _Extension_
+#
+# - #*: Returns the concatenation of multiple copies of +self+.
+# - #+: Returns the concatenation of +self+ and a given other string.
+# - #center: Returns a copy of +self+ centered between pad substrings.
+# - #concat: Returns the concatenation of +self+ with given other strings.
+# - #prepend: Returns the concatenation of a given other string with +self+.
+# - #ljust: Returns a copy of +self+ of a given length, right-padded with a given other string.
+# - #rjust: Returns a copy of +self+ of a given length, left-padded with a given other string.
+#
+# _Encoding_
+#
+# - #b: Returns a copy of +self+ with ASCII-8BIT encoding.
+# - #scrub: Returns a copy of +self+ with each invalid byte replaced with a given character.
+# - #unicode_normalize: Returns a copy of +self+ with each character Unicode-normalized.
+# - #encode: Returns a copy of +self+ with all characters transcoded from one encoding to another.
+#
+# _Substitution_
+#
+# - #dump: Returns a copy of +self+ with all non-printing characters replaced by \xHH notation
+# and all special characters escaped.
+# - #undump: Returns a copy of +self+ with all \xNN notations replaced by \uNNNN notations
+# and all escaped characters unescaped.
+# - #sub: Returns a copy of +self+ with the first substring matching a given pattern
+# replaced with a given replacement string.
+# - #gsub: Returns a copy of +self+ with each substring that matches a given pattern
+# replaced with a given replacement string.
+# - #succ (aliased as #next): Returns the string that is the successor to +self+.
+# - #reverse: Returns a copy of +self+ with its characters in reverse order.
+# - #tr: Returns a copy of +self+ with specified characters replaced with specified replacement characters.
+# - #tr_s: Returns a copy of +self+ with specified characters replaced with
+# specified replacement characters,
+# removing duplicates from the substrings that were modified.
+# - #%: Returns the string resulting from formatting a given object into +self+.
+#
+# _Casing_
+#
+# - #capitalize: Returns a copy of +self+ with the first character upcased
+# and all other characters downcased.
+# - #downcase: Returns a copy of +self+ with all characters downcased.
+# - #upcase: Returns a copy of +self+ with all characters upcased.
+# - #swapcase: Returns a copy of +self+ with all upcase characters downcased
+# and all downcase characters upcased.
+#
+# _Deletion_
+#
+# - #delete: Returns a copy of +self+ with characters removed.
+# - #delete_prefix: Returns a copy of +self+ with a given prefix removed.
+# - #delete_suffix: Returns a copy of +self+ with a given suffix removed.
+# - #lstrip: Returns a copy of +self+ with leading whitespace removed.
+# - #rstrip: Returns a copy of +self+ with trailing whitespace removed.
+# - #strip: Returns a copy of +self+ with leading and trailing whitespace removed.
+# - #chomp: Returns a copy of +self+ with a trailing record separator removed, if found.
+# - #chop: Returns a copy of +self+ with trailing newline characters or the last character removed.
+# - #squeeze: Returns a copy of +self+ with contiguous duplicate characters removed.
+# - #[] (aliased as #slice): Returns a substring determined by a given index, start/length, range, regexp, or string.
+# - #byteslice: Returns a substring determined by a given index, start/length, or range.
+# - #chr: Returns the first character.
+#
+# _Duplication_
+#
+# - #to_s (aliased as #to_str): If +self+ is a subclass of +String+, returns +self+ copied into a +String+;
+# otherwise, returns +self+.
+#
+# === Methods for Converting to Non-+String+
+#
+# Each of these methods converts the contents of +self+ to a non-+String+.
+#
+# Characters, Bytes, and Clusters
+#
+# - #bytes: Returns an array of the bytes in +self+.
+# - #chars: Returns an array of the characters in +self+.
+# - #codepoints: Returns an array of the integer ordinals in +self+.
+# - #getbyte: Returns an integer byte determined by a given index.
+# - #grapheme_clusters: Returns an array of the grapheme clusters in +self+.
+#
+# _Splitting_
+#
+# - #lines: Returns an array of the lines in +self+, as determined by a given record separator.
+# - #partition: Returns a 3-element array determined by the first substring that matches
+# a given substring or regexp.
+# - #rpartition: Returns a 3-element array determined by the last substring that matches
+# a given substring or regexp.
+# - #split: Returns an array of substrings determined by a given delimiter -- regexp or string --
+# or, if a block is given, passes those substrings to the block.
+#
+# _Matching_
+#
+# - #scan: Returns an array of substrings matching a given regexp or string, or,
+# if a block is given, passes each matching substring to the block.
+# - #unpack: Returns an array of substrings extracted from +self+ according to a given format.
+# - #unpack1: Returns the first substring extracted from +self+ according to a given format.
+#
+# _Numerics_
+#
+# - #hex: Returns the integer value of the leading characters, interpreted as hexadecimal digits.
+# - #oct: Returns the integer value of the leading characters, interpreted as octal digits.
+# - #ord: Returns the integer ordinal of the first character in +self+.
+# - #to_i: Returns the integer value of leading characters, interpreted as an integer.
+# - #to_f: Returns the floating-point value of leading characters, interpreted as a floating-point number.
+#
+# Strings and Symbols
+#
+# - #inspect: Returns a copy of +self+, enclosed in double quotes, with special characters escaped.
+# - #intern (aliased as #to_sym): Returns the symbol corresponding to +self+.
+#
+# === Methods for Iterating
+#
+# - #each_byte: Calls the given block with each successive byte in +self+.
+# - #each_char: Calls the given block with each successive character in +self+.
+# - #each_codepoint: Calls the given block with each successive integer codepoint in +self+.
+# - #each_grapheme_cluster: Calls the given block with each successive grapheme cluster in +self+.
+# - #each_line: Calls the given block with each successive line in +self+,
+# as determined by a given record separator.
+# - #upto: Calls the given block with each string value returned by successive calls to #succ.
class String; end