julia> split(" aa bb")
2-element Vector{SubString{String}}:
 "aa"
 "bb"
julia> split(" aa bb", ' ')
3-element Vector{SubString{String}}:
 ""
 "aa"
 "bb"
julia> split(" aa bb", " ")
3-element Vector{SubString{String}}:
 ""
 "aa"
 "bb"
              
              
              3 Likes
            
            
          From the docstring
If dlm is omitted, it defaults to isspace.
yet
julia> split(" aa bb", isspace)
3-element Vector{SubString{String}}:
 ""
 "aa"
 "bb"
julia> split(" aa bb")
2-element Vector{SubString{String}}:
 "aa"
 "bb"
File an issue.
              
              
              1 Like
            
            
          Oh, wait!
  split(str::AbstractString, dlm; limit::Integer=0, keepempty::Bool=true)
  split(str::AbstractString; limit::Integer=0, keepempty::Bool=false)
It’s the keepempty kwarg which has a different default.
julia> split(" aa bb"; keepempty=true)
3-element Vector{SubString{String}}:
 ""
 "aa"
 "bb"
julia> split(" aa bb"; keepempty=false)
2-element Vector{SubString{String}}:
 "aa"
 "bb"
I can kinda see where that comes from, even if it is a bit confusing.
              
              
              1 Like
            
            
          Yes, you are right, it’s documented
 keepempty: whether empty fields should be kept in the result. Default is false without a dlm argument, true with a dlm argument.
but …
              
              
              2 Likes
            
            
          Changing a documented behavior is probably bound o break some code, so I do not believe this will change in the close future.
              
              
              2 Likes
            
            
          This behaviour was probably chosen because it’s the behaviour of Perl and Python.
              
              
              1 Like