[DOC] Tweaks for String#succ

This commit is contained in:
Burdette Lamar 2025-10-26 14:04:16 -05:00 committed by GitHub
parent 7690309a02
commit 5c683bd9b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
Notes: git 2025-10-26 19:04:48 +00:00
Merged: https://github.com/ruby/ruby/pull/14943

Merged-By: peterzhu2118 <peter@peterzhu.ca>
2 changed files with 54 additions and 51 deletions

53
doc/string/succ.rdoc Normal file
View File

@ -0,0 +1,53 @@
Returns the successor to +self+. The successor is calculated by
incrementing characters.
The first character to be incremented is the rightmost alphanumeric:
or, if no alphanumerics, the rightmost character:
'THX1138'.succ # => "THX1139"
'<<koala>>'.succ # => "<<koalb>>"
'***'.succ # => '**+'
'тест'.succ # => "тесу"
'こんにちは'.succ # => "こんにちば"
The successor to a digit is another digit, "carrying" to the next-left
character for a "rollover" from 9 to 0, and prepending another digit
if necessary:
'00'.succ # => "01"
'09'.succ # => "10"
'99'.succ # => "100"
The successor to a letter is another letter of the same case,
carrying to the next-left character for a rollover,
and prepending another same-case letter if necessary:
'aa'.succ # => "ab"
'az'.succ # => "ba"
'zz'.succ # => "aaa"
'AA'.succ # => "AB"
'AZ'.succ # => "BA"
'ZZ'.succ # => "AAA"
The successor to a non-alphanumeric character is the next character
in the underlying character set's collating sequence,
carrying to the next-left character for a rollover,
and prepending another character if necessary:
s = 0.chr * 3 # => "\x00\x00\x00"
s.succ # => "\x00\x00\x01"
s = 255.chr * 3 # => "\xFF\xFF\xFF"
s.succ # => "\x01\x00\x00\x00"
Carrying can occur between and among mixtures of alphanumeric characters:
s = 'zz99zz99' # => "zz99zz99"
s.succ # => "aaa00aa00"
s = '99zz99zz' # => "99zz99zz"
s.succ # => "100aa00aa"
The successor to an empty +String+ is a new empty +String+:
''.succ # => ""
Related: see {Converting to New String}[rdoc-ref:String@Converting+to+New+String].

View File

@ -5315,57 +5315,7 @@ static VALUE str_succ(VALUE str);
* call-seq:
* succ -> new_str
*
* Returns the successor to +self+. The successor is calculated by
* incrementing characters.
*
* The first character to be incremented is the rightmost alphanumeric:
* or, if no alphanumerics, the rightmost character:
*
* 'THX1138'.succ # => "THX1139"
* '<<koala>>'.succ # => "<<koalb>>"
* '***'.succ # => '**+'
*
* The successor to a digit is another digit, "carrying" to the next-left
* character for a "rollover" from 9 to 0, and prepending another digit
* if necessary:
*
* '00'.succ # => "01"
* '09'.succ # => "10"
* '99'.succ # => "100"
*
* The successor to a letter is another letter of the same case,
* carrying to the next-left character for a rollover,
* and prepending another same-case letter if necessary:
*
* 'aa'.succ # => "ab"
* 'az'.succ # => "ba"
* 'zz'.succ # => "aaa"
* 'AA'.succ # => "AB"
* 'AZ'.succ # => "BA"
* 'ZZ'.succ # => "AAA"
*
* The successor to a non-alphanumeric character is the next character
* in the underlying character set's collating sequence,
* carrying to the next-left character for a rollover,
* and prepending another character if necessary:
*
* s = 0.chr * 3
* s # => "\x00\x00\x00"
* s.succ # => "\x00\x00\x01"
* s = 255.chr * 3
* s # => "\xFF\xFF\xFF"
* s.succ # => "\x01\x00\x00\x00"
*
* Carrying can occur between and among mixtures of alphanumeric characters:
*
* s = 'zz99zz99'
* s.succ # => "aaa00aa00"
* s = '99zz99zz'
* s.succ # => "100aa00aa"
*
* The successor to an empty +String+ is a new empty +String+:
*
* ''.succ # => ""
* :include: doc/string/succ.rdoc
*
*/