Good question! The implementation of String.split/3 is such that matches of 
the splitting pattern are discarded. For instance:

iex(1)> String.split("hello world", ~r/\s/)
["hello", "world"]
iex(2)> String.split("hello\tworld", ~r/\s/)
["hello", "world"]
iex(3)> String.split("hello\nworld", ~r/\s/)
["hello", "world"]

The output doesn't include the whitespace the string was split on, and thus 
a problem such as "truncate string to x number of words/characters *while 
preserving whitespace*" cannot be easily solved this way.
On Wednesday, December 2, 2020 at 1:52:12 PM UTC-5 shanes...@gmail.com 
wrote:

> Are there use-cases that you see for this feature that don't fall under 
> String.split/3 with a regex argument?
>
> https://hexdocs.pm/elixir/String.html#split/3
> On Tuesday, December 1, 2020 at 11:37:20 AM UTC-6 jonar...@gmail.com 
> wrote:
>
>>
>> This is a generalization of the existing (and oddly specific) 
>> String.chunk/2 function that takes a string and a single-argument predicate 
>> function, returning a list of strings.
>>
>> e.g.
>> String.chunk_by(" foo   bar ", &(&1 =~ ~r/\w/))
>> # => [" ", "foo", "   ", "bar", " "]
>>
>> The above example makes problems such as "wrap text at <line limit> 
>> preserving whitespace" or "truncate string to x number of words while 
>> preserving whitespace" simpler.
>>
>> The actual change would be pretty small and consist of renaming `chunk` 
>> to `chunk_by`, removing a line, and re-defining `chunk` as a slightly 
>> specialized call to `chunk_by`
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/706bd17d-7a4f-41c6-bcbf-07584badfb8en%40googlegroups.com.

Reply via email to