split и splitter

split и splitter в работе над строками

Используются модули: std.string, std.regex.

split и splitter

split - нетерпеливая функция, возвращающая сразу весь результат.

splitter - ленивая функция. В синтаксисе вызова ничего не меняется, кроме как split заменить на splitter.

Примеры.

Без указания разделителя split ведет себя похоже на одноименную функцию из Perl: делит строку по пробельным символам, схлопывая соседние разделители:

rdmd --eval='auto s="123  \t234"; s.split.writeln' # два пробела и tab
["123", "234"]

rdmd --eval='auto s="123  \t234"; s.splitter.writeln' # splitter - выглядит так же
["123", "234"]

rdmd --eval='auto s="678
123  \t234"; s.split.writeln' # с переносом строки
["678", "123", "234"]

С указанием разделителя типа string делается только то, что запрошено:

rdmd --eval='auto s="123  \t234"; s.split(" ").writeln' # два пробела и таб
["123", "", "\t234"]
rdmd --eval='auto s="123   234"; s.split(" ").writeln' # три пробела
["123", "", "", "234"]

Разделитель-символ, работает аналогично:

rdmd --eval="auto s=\"123   234\"; s.split(' ').writeln"
["123", "", "", "234"]

Разделитель - регулярное выражение:

rdmd --eval='auto s="123 \t 234"; s.split(regex(r"\s+")).writeln'
["123", "234"]

Дополнительно splitter позволяет удерживать разделители:

rdmd --eval='auto s="123***234*"; s.splitter!(Yes.keepSeparators)( regex(r"\*")).writeln'
["123", "*", "", "*", "", "*", "234", "*"]

# без удержания:
rdmd --eval='auto s="123***234*"; s.splitter( regex(r"\*")).writeln'
["123", "", "", "234", ""]

results for ""

    No results matching ""