Создание строк
Следующие функции создают строки: либо с нуля, либо объединяя строки, либо разбивая их на части. (О функциях, создающих строки на основе изменённого содержимого других строк, таких как string-replace и replace-regexp-in-string, см. раздел Поиск и замена.)
- Функция: make-string count character &optional multibyte
-
Эта функция возвращает строку, состоящую из count повторений символа character. Если count отрицательно, возникает ошибка.
(make-string 5 ?x) ⇒ "xxxxx" (make-string 0 ?x) ⇒ ""Обычно, если character — символ ASCII, результатом будет однобайтовая строка. Однако если необязательный аргумент multibyte не равен
nil, функция создаст многобайтовую строку. Это полезно, если позднее вам потребуется объединить результат с не-ASCII-строками или заменить некоторые его символы не-ASCII-символами.Среди других функций, похожих на эту, —
make-vector(см. раздел Векторы) иmake-list(см. раздел Создание конс-ячеек и списков).
- Функция: string &rest characters
-
Эта функция возвращает строку, содержащую символы characters.
(string ?a ?b ?c) ⇒ "abc"
- Функция: substring string &optional start end
-
Эта функция возвращает новую строку, состоящую из символов string в диапазоне от символа с индексом start (включительно) до символа с индексом end (не включительно). Индекс первого символа равен нулю. Если передан один аргумент, функция просто копирует string.
(substring "abcdefg" 0 3) ⇒ "abc"В приведённом выше примере индекс ‘a’ равен 0, индекс ‘b’ равен 1, а индекс ‘c’ равен 2. Индекс 3 — четвёртый символ строки — обозначает позицию символа, до которой копируется подстрока. Таким образом, из строки
"abcdefg"копируется ‘abc’.Отрицательное число отсчитывается от конца строки: −1 обозначает индекс последнего символа строки. Например:
(substring "abcdefg" -3 -1) ⇒ "ef"В этом примере индекс ‘e’ равен −3, индекс ‘f’ равен −2, а индекс ‘g’ равен −1. Поэтому символы ‘e’ и ‘f’ включаются, а символ ‘g’ не включается.
Если для end используется
nil, он обозначает длину строки. Таким образом,(substring "abcdefg" -3 nil) ⇒ "efg"Пропуск аргумента end равносилен указанию
nil. Следовательно,(substring string 0)возвращает копию всей строки string.(substring "abcdefg" 0) ⇒ "abcdefg"Однако для этой цели мы рекомендуем использовать
copy-sequence(см. раздел Последовательности).Если у скопированных из string символов есть текстовые свойства, они также копируются в новую строку. См. раздел Текстовые свойства.
substringтакже принимает вектор в качестве первого аргумента. Например:(substring [a b (c) "d"] 1 3) ⇒ [b (c)]Если start не является целым числом или end не является ни целым числом, ни
nil, возникает ошибкаwrong-type-argument. Если start указывает на символ после end или одно из целых чисел выходит за допустимый диапазон для string, возникает ошибкаargs-out-of-range.Сравните эту функцию с
buffer-substring(см. раздел Просмотр содержимого буфера), которая возвращает строку, содержащую часть текста в текущем буфере. Индекс начала строки равен 0, тогда как индекс начала буфера равен 1.
- Функция: substring-no-properties string &optional start end
Эта функция работает как
substring, но удаляет из результата все текстовые свойства. Кроме того, start можно опустить или указать какnil, что равносильно 0. Таким образом,(substring-no-properties string)возвращает копию string без текстовых свойств.
- Функция: concat &rest sequences
-
Эта функция возвращает строку, состоящую из символов переданных ей аргументов (а также их текстовых свойств, если они есть). Аргументами могут быть строки, списки чисел или векторы чисел; сами аргументы не изменяются. Если
concatвызвана без аргументов, она возвращает пустую строку.(concat "abc" "-def") ⇒ "abc-def" (concat "abc" (list 120 121) [122]) ⇒ "abcxyz" ;;nilis an empty sequence. (concat "abc" nil "-def") ⇒ "abc-def" (concat "The " "quick brown " "fox.") ⇒ "The quick brown fox." (concat) ⇒ ""Эта функция не всегда выделяет новую строку. Вызывающим сторонам не следует полагаться на то, что результат будет новой строкой или что он не будет
eqс существующей строкой.В частности, изменение возвращённого значения может непреднамеренно изменить другую строку, изменить константную строку в программе или даже вызвать ошибку. Чтобы получить строку, которую можно безопасно изменять, примените
copy-sequenceк результату.Если нужно создать строку из n копий заданной исходной строки source, можно воспользоваться
concatследующим образом:(apply #'concat (make-list n source))
Это основано на том, что
concatможет принимать в качестве аргументов последовательности любого типа.Сведения о других функциях объединения см. в описании
mapconcatв разделе Функции отображения,vconcatв разделе Функции для векторов иappendв разделе Создание конс-ячеек и списков. Чтобы объединить отдельные аргументы командной строки в строку для использования в качестве команды оболочки, см. combine-and-quote-strings.
- Функция: split-string string &optional separators omit-empty trim
-
Эта функция разбивает string на подстроки на основе регулярного выражения separators (см. раздел Регулярные выражения). Каждое совпадение с separators задаёт точку разделения; подстроки между точками разделения формируют список, который и возвращается.
Если separators равно
nil(или аргумент опущен), по умолчанию используется значениеsplit-string-default-separators, и функция ведёт себя так, как если бы omit-empty равнялсяt.Если omit-empty равен
nil(или аргумент опущен), результат содержит пустые строки, если имеются два последовательных совпадения с separators или совпадение находится рядом с началом либо концом string. Если omit-empty равенt, эти пустые строки опускаются в результате.Если необязательный аргумент trim не равен
nil, он должен быть регулярным выражением, задающим текст, который следует удалить в начале и конце каждой подстроки. После удаления подстрока может стать пустой и быть опущена из результата, если omit-empty равенt, как описано выше.Если нужно разбить строку на список отдельных аргументов командной строки, подходящий для
call-processилиstart-process, см. split-string-and-unquote.Не используйте для separators значение, соответствующее пустой строке, иначе результат будет непредсказуемым. Чтобы разбить строку на отдельные символы, используйте
string-to-listилиstring-to-vector.Примеры:
(split-string " one two ") ⇒ ("one" "two") (split-string "one::two:" ":") ⇒ ("one" "" "two" "") (split-string "one::two:" ":+") ⇒ ("one" "two" "") (split-string "one::two:" ":" t) ⇒ ("one" "two") (split-string "one: : two : " ":" t " +") ⇒ ("one" "two")
- Переменная: split-string-default-separators
Значение separators по умолчанию для
split-string. Обычно оно равно"[ \f\t\n\r\v]+".
- Функция: string-clean-whitespace string
Нормализует пробельные символы в string, заменяя последовательности пробельных символов одним пробелом, а также удаляя все пробельные символы в начале и конце string.
- Функция: string-trim-left string &optional regexp
Удаляет из начала string текст, соответствующий regexp. По умолчанию regexp равен ‘[ \t\n\r]+’.
- Функция: string-trim-right string &optional regexp
Удаляет из конца string текст, соответствующий regexp. По умолчанию regexp равен ‘[ \t\n\r]+’.
- Функция: string-trim string &optional trim-left trim-right
Удаляет из начала string текст, соответствующий trim-left, а из конца — текст, соответствующий trim-right. По умолчанию оба регулярных выражения равны ‘[ \t\n\r]+’.
- Функция: string-fill string width
Пытается переносить слова в string так, чтобы ширина отображаемых строк не превышала width. Переносы выполняются только по границам пробельных символов. Если отдельные слова длиннее width, они не сокращаются, поэтому в этом случае string может отображаться строками шире width.
- Функция: string-limit string length &optional end coding-system
-
Если строка string короче length символов, она возвращается без изменений. В противном случае возвращается подстрока string, состоящая из первых length символов. Если задан необязательный параметр end, вместо этого возвращается строка из последних length символов.
Если coding-system не равен
nil, перед ограничением длины строка string кодируется, а результатом будет однобайтовая строка длиной менееlengthбайт. Если string содержит символы, кодируемые несколькими байтами (например, при использованииutf-8), результирующая однобайтовая строка никогда не обрезается посреди представления символа.Эта функция измеряет длину строки в символах или байтах, поэтому обычно не подходит, если нужно укоротить строку для отображения; вместо неё используйте
truncate-string-to-width,window-text-pixel-sizeилиstring-glyph-split(см. раздел Размер отображаемого текста).
- Функция: string-lines string &optional omit-empty keep-newlines
Разбивает string на список строк по символам новой строки. Если необязательный аргумент omit-empty не равен
nil, пустые строки удаляются из результата. Если необязательный аргумент keep-newlines не равенnil, завершающие символы новой строки не удаляются из результирующих строк.
- Функция: string-pad string length &optional padding start
Дополняет string до заданной длины length, используя символ padding. По умолчанию padding — пробел. Если string длиннее length, дополнение не выполняется. Если start равен
nilили аргумент опущен, символы дополнения добавляются в конец string; если он не равенnil, символы дополнения добавляются в начало string.
- Функция: string-chop-newline string
Удаляет из string завершающий символ новой строки, если он есть.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Strings.html