70 lines
2.2 KiB
Clojure
70 lines
2.2 KiB
Clojure
(ns koans.02-strings
|
||
(:require [koan-engine.core :refer :all]
|
||
[clojure.string :as string]))
|
||
|
||
(meditations
|
||
"Строка — это текст, обрамлённый двойными кавычками"
|
||
(= __ "hello")
|
||
|
||
"Но это лишь вершина айсберга"
|
||
(= __ (str 'world))
|
||
|
||
"Создавая одну строку можно объединением нескольких"
|
||
(= "Cool right?" (str __ __))
|
||
|
||
"Можно получить символьный литерал"
|
||
(= \C (get "Characters" __))
|
||
|
||
"Сосчитать сколько их"
|
||
(= __ (count "Hello World"))
|
||
|
||
"Но он — не строка"
|
||
(= __ (= \c "c"))
|
||
|
||
"А что если нужна лишь часть строки?"
|
||
(= "World" (subs "Hello World" __ __))
|
||
|
||
"Объединяем элементы в строку"
|
||
(= __ (string/join '(1 2 3)))
|
||
|
||
"Объединяем, но разделяя между собой"
|
||
(= "1, 2, 3" (string/join __ '(1 2 3)))
|
||
|
||
"Можно разделить построчно"
|
||
(= [__ __ __] (string/split-lines "1\n2\n3"))
|
||
|
||
"Можно инвертировать"
|
||
(= __ (string/reverse "hello"))
|
||
|
||
"Можно найти индекс первого совпадения"
|
||
(= 0 (string/index-of "hello world" __))
|
||
|
||
"Или последнего"
|
||
(= __ (string/last-index-of "hello world, hello" "hello"))
|
||
|
||
"А если ничто не совпало, то что мы получим?"
|
||
(= __ (string/index-of "hello world" "bob"))
|
||
|
||
"Иногда неплохо бы избавиться от пробелов"
|
||
(= __ (string/trim " \nhello world \t \n"))
|
||
|
||
"Тест на символьный литерал"
|
||
(= __ (char? \c))
|
||
|
||
"Тут точно не пройдёт"
|
||
(= __ (char? "a"))
|
||
|
||
"«Чары» — они не строки"
|
||
(= __ (string? \b))
|
||
|
||
"А строки — строки"
|
||
(= true (string? __))
|
||
|
||
"Иногда и пустые"
|
||
(= __ (string/blank? ""))
|
||
|
||
"Хотя на первый взгляд и не скажешь"
|
||
(= __ (string/blank? " \n \t "))
|
||
|
||
"Всё же большинство строк не пусты"
|
||
(= __ (string/blank? "hello?\nare you out there?")))
|