# :markup: ruby class String # call-seq: # String.new(string = '') -> new_string # String.new(string = '', encoding: encoding) -> new_string # String.new(string = '', capacity: size) -> new_string # # Returns a new \String that is a copy of +string+. # # With no arguments, returns the empty string with the Encoding ASCII-8BIT: # s = String.new # s # => "" # s.encoding # => # # # With the single \String argument +string+, returns a copy of +string+ # with the same encoding as +string+: # s = String.new('Que veut dire ça?') # s # => "Que veut dire ça?" # s.encoding # => # # # Literal strings like "" or here-documents always use # Encoding@Script+encoding, unlike String.new. # # With keyword +encoding+, returns a copy of +str+ # with the specified encoding: # s = String.new(encoding: 'ASCII') # s.encoding # => # # s = String.new('foo', encoding: 'ASCII') # s.encoding # => # # # Note that these are equivalent: # s0 = String.new('foo', encoding: 'ASCII') # s1 = 'foo'.force_encoding('ASCII') # s0.encoding == s1.encoding # => true # # With keyword +capacity+, returns a copy of +str+; # the given +capacity+ may set the size of the internal buffer, # which may affect performance: # String.new(capacity: 1) # => "" # String.new(capacity: 4096) # => "" # # The +string+, +encoding+, and +capacity+ arguments may all be used together: # # String.new('hello', encoding: 'UTF-8', capacity: 25) # def initialize(str = '', encoding: nil, capacity: nil) Primitive.rb_str_init(str, encoding, capacity) end # call-seq: # bytes -> array_of_bytes # # Returns an array of the bytes in +self+: # # 'hello'.bytes # => [104, 101, 108, 108, 111] # 'тест'.bytes # => [209, 130, 208, 181, 209, 129, 209, 130] # 'こんにちは'.bytes # # => [227, 129, 147, 227, 130, 147, 227, 129, 171, 227, 129, 161, 227, 129, 175] # def bytes; end # call-seq: # each_byte {|byte| ... } -> self # each_byte -> enumerator # # Calls the given block with each successive byte from +self+; # returns +self+: # # 'hello'.each_byte {|byte| print byte, ' ' } # print "\n" # 'тест'.each_byte {|byte| print byte, ' ' } # print "\n" # 'こんにちは'.each_byte {|byte| print byte, ' ' } # print "\n" # # Output: # # 104 101 108 108 111 # 209 130 208 181 209 129 209 130 # 227 129 147 227 130 147 227 129 171 227 129 161 227 129 175 # # Returns an enumerator if no block is given. def each_byte; end # call-seq: # each_line(line_sep = $/, chomp: false) {|substring| ... } -> self # each_line(line_sep = $/, chomp: false) -> enumerator # # With a block given, forms the substrings ("lines") # that are the result of splitting +self+ # at each occurrence of the given line separator +line_sep+; # passes each line to the block; # returns +self+: # # s = <<~EOT # This is the first line. # This is line two. # # This is line four. # This is line five. # EOT # # s.each_line {|line| p line } # # Output: # # "This is the first line.\n" # "This is line two.\n" # "\n" # "This is line four.\n" # "This is line five.\n" # # With a different +line_sep+: # # s.each_line(' is ') {|line| p line } # # Output: # # "This is " # "the first line.\nThis is " # "line two.\n\nThis is " # "line four.\nThis is " # "line five.\n" # # With +chomp+ as +true+, removes the trailing +line_sep+ from each line: # # s.each_line(chomp: true) {|line| p line } # # Output: # # "This is the first line." # "This is line two." # "" # "This is line four." # "This is line five." # # With an empty string as +line_sep+, # forms and passes "paragraphs" by splitting at each occurrence # of two or more newlines: # # s.each_line('') {|line| p line } # # Output: # # "This is the first line.\nThis is line two.\n\n" # "This is line four.\nThis is line five.\n" # # With no block given, returns an enumerator. # def each_line; end # call-seq: # split(field_sep = $;, limit = nil) -> array # split(field_sep = $;, limit = nil) {|substring| ... } -> self # # Returns an array of substrings of +self+ # that are the result of splitting +self+ # at each occurrence of the given field separator +field_sep+. # # When +field_sep+ is $;: # # - If $; is +nil+ (its default value), # the split occurs just as if +field_sep+ were given as a space character # (see below). # # - If $; is a string, # the split ocurs just as if +field_sep+ were given as that string # (see below). # # When +field_sep+ is ' ' and +limit+ is +nil+, # the split occurs at each sequence of whitespace: # # 'abc def ghi'.split(' ') # => ["abc", "def", "ghi"] # "abc \n\tdef\t\n ghi".split(' ') # => ["abc", "def", "ghi"] # 'abc def ghi'.split(' ') # => ["abc", "def", "ghi"] # ''.split(' ') # => [] # # When +field_sep+ is a string different from ' ' # and +limit+ is +nil+, # the split occurs at each occurrence of +field_sep+; # trailing empty substrings are not returned: # # 'abracadabra'.split('ab') # => ["", "racad", "ra"] # 'aaabcdaaa'.split('a') # => ["", "", "", "bcd"] # ''.split('a') # => [] # '3.14159'.split('1') # => ["3.", "4", "59"] # '!@#$%^$&*($)_+'.split('$') # => ["!@#", "%^", "&*(", ")_+"] # 'тест'.split('т') # => ["", "ес"] # 'こんにちは'.split('に') # => ["こん", "ちは"] # # When +field_sep+ is a Regexp and +limit+ is +nil+, # the split occurs at each occurrence of a match; # trailing empty substrings are not returned: # # 'abracadabra'.split(/ab/) # => ["", "racad", "ra"] # 'aaabcdaaa'.split(/a/) # => ["", "", "", "bcd"] # 'aaabcdaaa'.split(//) # => ["a", "a", "a", "b", "c", "d", "a", "a", "a"] # '1 + 1 == 2'.split(/\W+/) # => ["1", "1", "2"] # # If the \Regexp contains groups, their matches are also included # in the returned array: # # '1:2:3'.split(/(:)()()/, 2) # => ["1", ":", "", "", "2:3"] # # As seen above, if +limit+ is +nil+, # trailing empty substrings are not returned; # the same is true if +limit+ is zero: # # 'aaabcdaaa'.split('a') # => ["", "", "", "bcd"] # 'aaabcdaaa'.split('a', 0) # => ["", "", "", "bcd"] # # If +limit+ is positive integer +n+, no more than n - 1- # splits occur, so that at most +n+ substrings are returned, # and trailing empty substrings are included: # # 'aaabcdaaa'.split('a', 1) # => ["aaabcdaaa"] # 'aaabcdaaa'.split('a', 2) # => ["", "aabcdaaa"] # 'aaabcdaaa'.split('a', 5) # => ["", "", "", "bcd", "aa"] # 'aaabcdaaa'.split('a', 7) # => ["", "", "", "bcd", "", "", ""] # 'aaabcdaaa'.split('a', 8) # => ["", "", "", "bcd", "", "", ""] # # Note that if +field_sep+ is a \Regexp containing groups, # their matches are in the returned array, but do not count toward the limit. # # If +limit+ is negative, it behaves the same as if +limit+ was +nil+, # meaning that there is no limit, # and trailing empty substrings are included: # # 'aaabcdaaa'.split('a', -1) # => ["", "", "", "bcd", "", "", ""] # # If a block is given, it is called with each substring: # # 'abc def ghi'.split(' ') {|substring| p substring } # # Output: # # "abc" # "def" # "ghi" # def split; end end