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