Issue #5120 has been updated by Alexey Muranov.


Thank you for the explanation.
Yes, Yusuke, my definition was wrong, i thought about "a maximal array of non-empty strings whose members don't contain any matching substrings".

Gary, I didn't read the documentation carefully, so i didn't know about the discarding of the trailing empty fields, this is why the result looked illogical to me (why not the beginning empty fields?)
I think str1.split(str2, -1) produces what i would have expected.
I will think more about it, thanks.

Alexey.
----------------------------------------
Feature #5120: String#split needs to be logical
http://redmine.ruby-lang.org/issues/5120

Author: Alexey Muranov
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


I would call this a bug, but i am new to Ruby, so i report this as a feature request.

Here are examples showing a surprising and inconsistent behavior of String#split method:

"aa".split('a')  # => []
"aab".split('a')  # => ["", "", "b"]

"aaa".split('aa')  # => ["", "a"] 
"aaaa".split('aa')  # => []
"aaaaa".split('aa')  # => ["", "", "a"] 

"".split('')  # => []
"a".split('')  # => ["a"]

What is the definition of *split*?
In my opinion, there should be given a simple one that would make it clear what to expect.
For example:

  str1.split(str2) returns a maximal array of non-empty substrings of str1 which can be concatenated with copies of str2 to form str1.

Additional precisions can be made to this definition to make clear what to expect as the result of "baaab".split("aa").

Thanks for attention.


-- 
http://redmine.ruby-lang.org