# Split inconsistency?

**URL:** <https://discourse.julialang.org/t/split-inconsistency/75380>\
**Category:** General Usage\
**Tags:** strings\
**Created:** [January 28, 2022, 4:32pm UTC](https://discourse.julialang.org/t/split-inconsistency/75380 "2022-01-28T16:32:56Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [January 28, 2022, 4:32pm UTC](https://discourse.julialang.org/t/split-inconsistency/75380/1 "2022-01-28T16:32:56Z")

</div>

```julia
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"

```

---

<div class="post-metadata">

**Author:** ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)\
**Post date:** [January 28, 2022, 4:57pm UTC](https://discourse.julialang.org/t/split-inconsistency/75380/2 "2022-01-28T16:57:41Z")

</div>

From the docstring

> If dlm is omitted, it defaults to isspace.

yet

```julia
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.

---

<div class="post-metadata">

**Author:** ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)\
**Post date:** [January 28, 2022, 5:00pm UTC](https://discourse.julialang.org/t/split-inconsistency/75380/3 "2022-01-28T17:00:01Z")

</div>

Oh, wait!

```julia
  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
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.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [January 28, 2022, 5:11pm UTC](https://discourse.julialang.org/t/split-inconsistency/75380/4 "2022-01-28T17:11:43Z")

</div>

Yes, you are right, it’s documented

```julia
 keepempty: whether empty fields should be kept in the result. Default is false without a dlm argument, true with a dlm argument.

```

but …

---

<div class="post-metadata">

**Author:** ![Henrique\_Becker](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrique_becker/32/15443_2.png) [@Henrique\_Becker](https://discourse.julialang.org/u/Henrique_Becker)\
**Post date:** [January 28, 2022, 5:47pm UTC](https://discourse.julialang.org/t/split-inconsistency/75380/5 "2022-01-28T17:47:35Z")

</div>

Changing a documented behavior is probably bound o break some code, so I do not believe this will change in the close future.

---

<div class="post-metadata">

**Author:** ![jakobnissen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jakobnissen/32/13477_2.png) [@jakobnissen](https://discourse.julialang.org/u/jakobnissen)\
**Post date:** [January 28, 2022, 6:31pm UTC](https://discourse.julialang.org/t/split-inconsistency/75380/6 "2022-01-28T18:31:37Z")

</div>

This behaviour was probably chosen because it’s the behaviour of Perl and Python.
