@@ -239,8 +239,8 @@ function rpad(
239239end
240240
241241"""
242- split(s::AbstractString; limit::Integer=0, keep ::Bool=false)
243- split(s::AbstractString, chars; limit::Integer=0, keep ::Bool=true)
242+ split(s::AbstractString; limit::Integer=0, keepempty ::Bool=false)
243+ split(s::AbstractString, chars; limit::Integer=0, keepempty ::Bool=true)
244244
245245Return an array of substrings by splitting the given string on occurrences of the given
246246character delimiters, which may be specified in any of the formats allowed by
@@ -251,9 +251,11 @@ If `chars` is omitted, it defaults to the set of all space characters.
251251
252252The optional keyword arguments are:
253253 - `limit`: the maximum size of the result. `limit=0` implies no maximum (default)
254- - `keep `: whether empty fields should be kept in the result. Default is `false` without
254+ - `keepempty `: whether empty fields should be kept in the result. Default is `false` without
255255 a `chars` argument, `true` with a `chars` argument.
256256
257+ See also [`rsplit`](@ref).
258+
257259# Examples
258260```jldoctest
259261julia> a = "Ma.rch"
@@ -267,25 +269,40 @@ julia> split(a,".")
267269"""
268270function split end
269271
270- split (str:: T , splitter;
271- limit:: Integer = 0 , keep:: Bool = true ) where {T<: AbstractString } =
272- _split (str, splitter, limit, keep, T <: SubString ? T[] : SubString{T}[])
273- split (str:: T , splitter:: Union{Tuple{Vararg{<:AbstractChar}},AbstractVector{<:AbstractChar},Set{<:AbstractChar}} ;
274- limit:: Integer = 0 , keep:: Bool = true ) where {T<: AbstractString } =
275- _split (str, in (splitter), limit, keep, T <: SubString ? T[] : SubString{T}[])
276- split (str:: T , splitter:: AbstractChar ;
277- limit:: Integer = 0 , keep:: Bool = true ) where {T<: AbstractString } =
278- _split (str, isequal (splitter), limit, keep, T <: SubString ? T[] : SubString{T}[])
279-
280- function _split (str:: AbstractString , splitter, limit:: Integer , keep_empty:: Bool , strs:: Array )
272+ function split (str:: T , splitter;
273+ limit:: Integer = 0 , keepempty:: Bool = true , keep:: Union{Nothing,Bool} = nothing ) where {T<: AbstractString }
274+ if keep != = nothing
275+ Base. depwarn (" The `keep` keyword argument is deprecated; use `keepempty` instead" , :split )
276+ keepempty = keep
277+ end
278+ _split (str, splitter, limit, keepempty, T <: SubString ? T[] : SubString{T}[])
279+ end
280+ function split (str:: T , splitter:: Union{Tuple{Vararg{<:AbstractChar}},AbstractVector{<:AbstractChar},Set{<:AbstractChar}} ;
281+ limit:: Integer = 0 , keepempty:: Bool = true , keep:: Union{Nothing,Bool} = nothing ) where {T<: AbstractString }
282+ if keep != = nothing
283+ Base. depwarn (" The `keep` keyword argument is deprecated; use `keepempty` instead" , :split )
284+ keepempty = keep
285+ end
286+ _split (str, in (splitter), limit, keepempty, T <: SubString ? T[] : SubString{T}[])
287+ end
288+ function split (str:: T , splitter:: AbstractChar ;
289+ limit:: Integer = 0 , keepempty:: Bool = true , keep:: Union{Nothing,Bool} = nothing ) where {T<: AbstractString }
290+ if keep != = nothing
291+ Base. depwarn (" The `keep` keyword argument is deprecated; use `keepempty` instead" , :split )
292+ keepempty = keep
293+ end
294+ _split (str, isequal (splitter), limit, keepempty, T <: SubString ? T[] : SubString{T}[])
295+ end
296+
297+ function _split (str:: AbstractString , splitter, limit:: Integer , keepempty:: Bool , strs:: Array )
281298 i = 1 # firstindex(str)
282299 n = lastindex (str)
283300 r = coalesce (findfirst (splitter,str), 0 )
284301 if r != 0 : - 1
285302 j, k = first (r), nextind (str,last (r))
286303 while 0 < j <= n && length (strs) != limit- 1
287304 if i < k
288- if keep_empty || i < j
305+ if keepempty || i < j
289306 push! (strs, SubString (str,i,prevind (str,j)))
290307 end
291308 i = k
@@ -296,17 +313,20 @@ function _split(str::AbstractString, splitter, limit::Integer, keep_empty::Bool,
296313 j, k = first (r), nextind (str,last (r))
297314 end
298315 end
299- if keep_empty || ! done (str,i)
316+ if keepempty || ! done (str,i)
300317 push! (strs, SubString (str,i))
301318 end
302319 return strs
303320end
304321
305322# a bit oddball, but standard behavior in Perl, Ruby & Python:
306- split (str:: AbstractString ) = split (str, _default_delims; limit= 0 , keep= false )
323+ split (str:: AbstractString ;
324+ limit:: Integer = 0 , keepempty:: Bool = false ) =
325+ split (str, _default_delims; limit= limit, keepempty= keepempty)
307326
308327"""
309- rsplit(s::AbstractString, [chars]; limit::Integer=0, keep::Bool=true)
328+ rsplit(s::AbstractString; limit::Integer=0, keepempty::Bool=false)
329+ rsplit(s::AbstractString, chars; limit::Integer=0, keepempty::Bool=true)
310330
311331Similar to [`split`](@ref), but starting from the end of the string.
312332
@@ -335,29 +355,47 @@ julia> rsplit(a,".";limit=2)
335355"""
336356function rsplit end
337357
338- rsplit (str:: T , splitter; limit:: Integer = 0 , keep:: Bool = true ) where {T<: AbstractString } =
339- _rsplit (str, splitter, limit, keep, T <: SubString ? T[] : SubString{T}[])
340- rsplit (str:: T , splitter:: Union{Tuple{Vararg{<:AbstractChar}},AbstractVector{<:AbstractChar},Set{<:AbstractChar}} ;
341- limit:: Integer = 0 , keep:: Bool = true ) where {T<: AbstractString } =
342- _rsplit (str, in (splitter), limit, keep, T <: SubString ? T[] : SubString{T}[])
343- rsplit (str:: T , splitter:: AbstractChar ;
344- limit:: Integer = 0 , keep:: Bool = true ) where {T<: AbstractString } =
345- _rsplit (str, isequal (splitter), limit, keep, T <: SubString ? T[] : SubString{T}[])
358+ function rsplit (str:: T , splitter;
359+ limit:: Integer = 0 , keepempty:: Bool = true , keep:: Union{Nothing,Bool} = nothing ) where {T<: AbstractString }
360+ if keep != = nothing
361+ Base. depwarn (" The `keep` keyword argument is deprecated; use `keepempty` instead" , :rsplit )
362+ keepempty = keep
363+ end
364+ _rsplit (str, splitter, limit, keepempty, T <: SubString ? T[] : SubString{T}[])
365+ end
366+ function rsplit (str:: T , splitter:: Union{Tuple{Vararg{<:AbstractChar}},AbstractVector{<:AbstractChar},Set{<:AbstractChar}} ;
367+ limit:: Integer = 0 , keepempty:: Bool = true , keep:: Union{Nothing,Bool} = nothing ) where {T<: AbstractString }
368+ if keep != = nothing
369+ Base. depwarn (" The `keep` keyword argument is deprecated; use `keepempty` instead" , :rsplit )
370+ keepempty = keep
371+ end
372+ _rsplit (str, in (splitter), limit, keepempty, T <: SubString ? T[] : SubString{T}[])
373+ end
374+ function rsplit (str:: T , splitter:: AbstractChar ;
375+ limit:: Integer = 0 , keepempty:: Bool = true , keep:: Union{Nothing,Bool} = nothing ) where {T<: AbstractString }
376+ if keep != = nothing
377+ Base. depwarn (" The `keep` keyword argument is deprecated; use `keepempty` instead" , :rsplit )
378+ keepempty = keep
379+ end
380+ _rsplit (str, isequal (splitter), limit, keepempty, T <: SubString ? T[] : SubString{T}[])
381+ end
346382
347- function _rsplit (str:: AbstractString , splitter, limit:: Integer , keep_empty :: Bool , strs:: Array )
383+ function _rsplit (str:: AbstractString , splitter, limit:: Integer , keepempty :: Bool , strs:: Array )
348384 n = lastindex (str)
349385 r = coalesce (findlast (splitter, str), 0 )
350386 j, k = first (r), last (r)
351387 while j > 0 && k > 0 && length (strs) != limit- 1
352- (keep_empty || k < n) && pushfirst! (strs, SubString (str,nextind (str,k),n))
388+ (keepempty || k < n) && pushfirst! (strs, SubString (str,nextind (str,k),n))
353389 n = prevind (str, j)
354390 r = coalesce (findprev (splitter,str,n), 0 )
355391 j, k = first (r), last (r)
356392 end
357- (keep_empty || n > 0 ) && pushfirst! (strs, SubString (str,1 ,n))
393+ (keepempty || n > 0 ) && pushfirst! (strs, SubString (str,1 ,n))
358394 return strs
359395end
360- # rsplit(str::AbstractString) = rsplit(str, _default_delims, 0, false)
396+ rsplit (str:: AbstractString ;
397+ limit:: Integer = 0 , keepempty:: Bool = false ) =
398+ rsplit (str, _default_delims; limit= limit, keepempty= keepempty)
361399
362400_replace (io, repl, str, r, pattern) = print (io, repl)
363401_replace (io, repl:: Function , str, r, pattern) =
0 commit comments