std.string
Функции для работы со строками.
| Категория | Функции |
|---|---|
| Поиск | column indexOf indexOfAny indexOfNeither lastIndexOf lastIndexOfAny lastIndexOfNeither |
| Сравнение | isNumeric |
| Изменение | capitalize |
| Обрезка и заполнение | center chomp chompPrefix chop detabber detab entab entabber leftJustify outdent rightJustify strip stripLeft stripRight wrap |
| Замена | abbrev soundex soundexer succ tr translate |
| Разное | assumeUTF fromStringz lineSplitter representation splitLines toStringz |
Объекты типов string, wstring, и dstring являются значениями и не могут быть изменены поэлементно. Для изменения при построении строк используйте char[], wchar[], или dchar[]. Типы xxxstring предпочтительнее, так как они не демонстрируют нежелательное алиасирование, делая код более надёжным.
Следующие функции импортированы публично:
| Модуль | Функции |
|---|---|
| Публично импортированные функции | |
| std.algorithm | cmp count endsWith startsWith |
| std.array | join replace replaceInPlace split empty |
| std.format | format sformat |
| std.uni | icmp toLower toLowerInPlace toUpper toUpperInPlace |
В других модулях определён богатый набор функций для работы со строками. Функции, связанные с Unicode и ASCII, находятся в
std.uni и std.ascii соответственно. Другие функции, имеющие более широкую общность, чем просто строки, можно найти в std.algorithm и std.range.- См. также:
-
-
std.algorithmиstd.rangeдля общих алгоритмов обработки диапазонов -
std.asciiдля функций, работающих со строками ASCII -
std.uniдля функций, работающих со строками Unicode
-
- Лицензия:
- Лицензия Boost 1.0.
- Авторы:
- Walter Bright, Andrei Alexandrescu, Jonathan M Davis, и David L. 'SpottedTiger' Davis
- Источник
- std/string.d
- class StringException: object.Exception;
-
Исключение, выбрасываемое при ошибках в функциях std.string.
- Примеры:
-
import std.exception : assertThrown; auto bad = " a\n\tb\n c"; assertThrown!StringException(bad.outdent);
- pure nothrow @nogc @system inout(Char)[] fromStringz(Char)(return scope inout(Char)* cString)
Constraints: if (isSomeChar!Char); -
- Параметры:
inout(Char)* cStringСтрока C-стиля с нулевым завершением.
- Возвращает:
- Массив D-стиля типа
char,wcharилиdchar, ссылающийся на ту же строку. Возвращаемый массив будет иметь те же квалификаторы типа, что и входной. Важно: Возвращаемый массив является срезем исходного буфера. Исходные данные не изменяются и не копируются.
- Примеры:
-
writeln(fromStringz("foo\0"c.ptr)); // "foo"c writeln(fromStringz("foo\0"w.ptr)); // "foo"w writeln(fromStringz("foo\0"d.ptr)); // "foo"d writeln(fromStringz("福\0"c.ptr)); // "福"c writeln(fromStringz("福\0"w.ptr)); // "福"w writeln(fromStringz("福\0"d.ptr)); // "福"d
- pure nothrow @trusted immutable(char)* toStringz(scope const(char)[] s);
pure nothrow @trusted immutable(char)* toStringz(return scope string s); -
- Параметры:
const(char)[] sСтрока D-стиля.
- Возвращает:
- Строку C-стиля с нулевым завершением, эквивалентную
s.sне должен содержать вложенных'\0'символов, так как любая функция C будет рассматривать первый'\0'символ, который она встретит, как конец строки. Еслиs.emptyявляетсяtrue, то возвращается строка, содержащая только'\0'. Важно: При передачеchar*в функцию C, и если функция C сохраняет ее по какой-либо причине, убедитесь, что вы сохраняете ссылку на нее в вашем коде D. В противном случае она может стать недоступной во время цикла сбора мусора и привести к серьезной ошибке, когда код C попытается использовать ее.
- Примеры:
-
import core.stdc.string : strlen; import std.conv : to; auto p = toStringz("foo"); writeln(strlen(p)); // 3 const(char)[] foo = "abbzxyzzy"; p = toStringz(foo[3 .. 5]); writeln(strlen(p)); // 2 string test = ""; p = toStringz(test); writeln(*p); // 0 test = "\0"; p = toStringz(test); writeln(*p); // 0 test = "foo\0"; p = toStringz(test); assert(p[0] == 'f' && p[1] == 'o' && p[2] == 'o' && p[3] == 0); const string test2 = ""; p = toStringz(test2); writeln(*p); // 0
- alias CaseSensitive = std.typecons.Flag!"caseSensitive".Flag;
-
Флаг, указывающий, является ли поиск регистрозависимым.
- ptrdiff_t indexOf(Range)(Range s, dchar c, CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isInputRange!Range && isSomeChar!(ElementType!Range) && !isSomeString!Range);
ptrdiff_t indexOf(C)(scope const(C)[] s, dchar c, CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!C);
ptrdiff_t indexOf(Range)(Range s, dchar c, size_t startIdx, CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isInputRange!Range && isSomeChar!(ElementType!Range) && !isSomeString!Range);
ptrdiff_t indexOf(C)(scope const(C)[] s, dchar c, size_t startIdx, CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!C); -
Поиск символа в диапазоне.
- Параметры:
Range sстрока или InputRange символов для поиска в правильном формате UTF dchar cсимвол для поиска size_t startIdxначальный индекс хорошо сформированного кодового пункта CaseSensitive csYes.caseSensitiveилиNo.caseSensitive
- Возвращает:
- индекс первого вхождения
cвsотносительно начального индексаstartIdx. Еслиcне найден, возвращается-1. Еслиcнайден, значение возвращаемого индекса не меньшеstartIdx. Если параметры не являются валидным UTF, результат все равно будет в диапазоне [-1 .. s.length], но не будет надежным в противном случае.
- Выбрасывает:
- Если последовательность, начинающаяся с
startIdx, не представляет собой хорошо сформированный кодовый пункт, может быть выброшено исключениеstd.utf.UTFException.
- См. также:
std.algorithm.searching.countUntil
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(indexOf(s, 'W')); // 6 writeln(indexOf(s, 'Z')); // -1 writeln(indexOf(s, 'w', No.caseSensitive)); // 6
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(indexOf(s, 'W', 4)); // 6 writeln(indexOf(s, 'Z', 100)); // -1 writeln(indexOf(s, 'w', 3, No.caseSensitive)); // 6
- ptrdiff_t indexOf(Range, Char)(Range s, const(Char)[] sub)
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && isSomeChar!Char);
ptrdiff_t indexOf(Range, Char)(Range s, const(Char)[] sub, in CaseSensitive cs)
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && isSomeChar!Char);
@safe ptrdiff_t indexOf(Char1, Char2)(const(Char1)[] s, const(Char2)[] sub, in size_t startIdx)
Constraints: if (isSomeChar!Char1 && isSomeChar!Char2);
@safe ptrdiff_t indexOf(Char1, Char2)(const(Char1)[] s, const(Char2)[] sub, in size_t startIdx, in CaseSensitive cs)
Constraints: if (isSomeChar!Char1 && isSomeChar!Char2); -
Поиск подстроки в
s.- Параметры:
Range sстрока или ForwardRange символов для поиска в правильном формате UTF const(Char)[] subподстрока для поиска size_t startIdxиндекс в s, с которого начинается поиск CaseSensitive csYes.caseSensitive(по умолчанию) илиNo.caseSensitive
- Возвращает:
- индекс первого вхождения
subвsотносительно начального индексаstartIdx. Еслиsubне найден, возвращается-1. Если данные не являются валидным UTF, результат все равно будет в диапазоне [-1 .. s.length], но не будет надежным в противном случае. Еслиsubнайден, значение возвращаемого индекса не меньшеstartIdx.
- Выбрасывает:
- Если последовательность, начинающаяся с
startIdx, не представляет собой хорошо сформированный кодовый пункт, может быть выброшено исключениеstd.utf.UTFException.
- Ошибки:
- Не работает с регистронезависимыми строками, где отображение функций tolower и toupper не является взаимно однозначным.
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(indexOf(s, "Wo", 4)); // 6 writeln(indexOf(s, "Zo", 100)); // -1 writeln(indexOf(s, "wo", 3, No.caseSensitive)); // 6
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(indexOf(s, "Wo")); // 6 writeln(indexOf(s, "Zo")); // -1 writeln(indexOf(s, "wO", No.caseSensitive)); // 6
- pure @safe ptrdiff_t lastIndexOf(Char)(const(Char)[] s, in dchar c, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char);
pure @safe ptrdiff_t lastIndexOf(Char)(const(Char)[] s, in dchar c, in size_t startIdx, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char); -
- Параметры:
const(Char)[] sстрока для поиска dchar cсимвол для поиска size_t startIdxиндекс в s, с которого начинается поиск CaseSensitive csYes.caseSensitiveилиNo.caseSensitive
- Возвращает:
- Индекс последнего вхождения
cвs. Еслиcне найден, возвращается-1. СрезыstartIdxsвыполняются следующим образомs[0 .. startIdx].startIdxпредставляет индекс кодовой единицы вs.
- Выбрасывает:
- Если последовательность, заканчивающаяся в
startIdx, не представляет собой хорошо сформированный кодовый пункт, может быть выброшено исключениеstd.utf.UTFException.csуказывает, являются ли сравнения регистрозависимыми.
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(lastIndexOf(s, 'l')); // 9 writeln(lastIndexOf(s, 'Z')); // -1 writeln(lastIndexOf(s, 'L', No.caseSensitive)); // 9
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(lastIndexOf(s, 'l', 4)); // 3 writeln(lastIndexOf(s, 'Z', 1337)); // -1 writeln(lastIndexOf(s, 'L', 7, No.caseSensitive)); // 3
- pure @safe ptrdiff_t lastIndexOf(Char1, Char2)(const(Char1)[] s, const(Char2)[] sub, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char1 && isSomeChar!Char2);
pure @safe ptrdiff_t lastIndexOf(Char1, Char2)(const(Char1)[] s, const(Char2)[] sub, in size_t startIdx, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char1 && isSomeChar!Char2); -
- Параметры:
const(Char1)[] sстрока для поиска const(Char2)[] subподстрока для поиска size_t startIdxиндекс в s, с которого начинается поиск CaseSensitive csYes.caseSensitiveилиNo.caseSensitive
- Возвращает:
- индекс последнего вхождения
subвs. Еслиsubне найден, возвращается-1. СрезыstartIdxsвыполняются следующим образомs[0 .. startIdx].startIdxпредставляет индекс кодовой единицы вs.
- Выбрасывает:
- Если последовательность, заканчивающаяся в
startIdx, не представляет собой хорошо сформированный кодовый пункт, может быть выброшено исключениеstd.utf.UTFException.csуказывает, являются ли сравнения регистрозависимыми.
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(lastIndexOf(s, "ll")); // 2 writeln(lastIndexOf(s, "Zo")); // -1 writeln(lastIndexOf(s, "lL", No.caseSensitive)); // 2
- Примеры:
-
import std.typecons : No; string s = "Hello World"; writeln(lastIndexOf(s, "ll", 4)); // 2 writeln(lastIndexOf(s, "Zo", 128)); // -1 writeln(lastIndexOf(s, "lL", 3, No.caseSensitive)); // -1
- pure @safe ptrdiff_t indexOfAny(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2);
pure @safe ptrdiff_t indexOfAny(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in size_t startIdx, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2); -
Возвращает индекс первого вхождения любого из элементов в
needlesвhaystack. Если ни один элемент изneedlesне найден, то возвращается-1. СрезыstartIdxнадhaystackвыполняются следующим образомhaystack[startIdx .. $].startIdxпредставляет собой индекс кодовой единицы вhaystack. Если последовательность, заканчивающаяся вstartIdx, не представляет собой корректный кодовый символ, может быть выброшено исключениеstd.utf.UTFException.- Parameters:
const(Char)[] haystackСтрока для поиска иголок в ней. const(Char2)[] needlesСтроки для поиска в стоге. size_t startIdxсрезы стога так haystack[startIdx .. $]. Если startIdx больше или равен длине стога, функция возвращает-1.CaseSensitive csУказывает, чувствительны ли сравнения к регистру.
- Examples:
-
import std.conv : to; ptrdiff_t i = "helloWorld".indexOfAny("Wr"); writeln(i); // 5 i = "öällo world".indexOfAny("lo "); writeln(i); // 4
- Examples:
-
import std.conv : to; ptrdiff_t i = "helloWorld".indexOfAny("Wr", 4); writeln(i); // 5 i = "Foo öällo world".indexOfAny("lh", 3); writeln(i); // 8
- pure @safe ptrdiff_t lastIndexOfAny(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2);
pure @safe ptrdiff_t lastIndexOfAny(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in size_t stopIdx, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2); -
Возвращает индекс последнего вхождения любого из элементов в
needlesвhaystack. Если ни один элемент изneedlesне найден, возвращается-1. СрезыstopIdxнадhaystackвыполняются следующим образомs[0 .. stopIdx].stopIdxпредставляет собой индекс кодовой единицы вhaystack. Если последовательность, заканчивающаяся вstartIdx, не представляет собой корректного кодового символа, может быть выброшено исключениеstd.utf.UTFException.- Parameters:
const(Char)[] haystackСтрока для поиска иголок в ней. const(Char2)[] needlesСтроки для поиска в стоге. size_t stopIdxсрезы стога так haystack[0 .. stopIdx]. Если stopIdx больше или равен длине стога, функция возвращает-1.CaseSensitive csУказывает, чувствительны ли сравнения к регистру.
- Examples:
-
ptrdiff_t i = "helloWorld".lastIndexOfAny("Wlo"); writeln(i); // 8 i = "Foo öäöllo world".lastIndexOfAny("öF"); writeln(i); // 8
- Examples:
-
import std.conv : to; ptrdiff_t i = "helloWorld".lastIndexOfAny("Wlo", 4); writeln(i); // 3 i = "Foo öäöllo world".lastIndexOfAny("öF", 3); writeln(i); // 0
- pure @safe ptrdiff_t indexOfNeither(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2);
pure @safe ptrdiff_t indexOfNeither(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in size_t startIdx, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2); -
Возвращает индекс первого вхождения любого символа, не являющегося элементом
needlesвhaystack. Если все элементыhaystackявляются элементамиneedles, возвращается-1.- Parameters:
const(Char)[] haystackСтрока для поиска иголок в ней. const(Char2)[] needlesСтроки для поиска в стоге. size_t startIdxсрезы стога так haystack[startIdx .. $]. Если startIdx больше или равен длине стога, функция возвращает-1.CaseSensitive csУказывает, чувствительны ли сравнения к регистру.
- Examples:
-
writeln(indexOfNeither("abba", "a", 2)); // 2 writeln(indexOfNeither("def", "de", 1)); // 2 writeln(indexOfNeither("dfefffg", "dfe", 4)); // 6
- Examples:
-
writeln(indexOfNeither("def", "a")); // 0 writeln(indexOfNeither("def", "de")); // 2 writeln(indexOfNeither("dfefffg", "dfe")); // 6
- pure @safe ptrdiff_t lastIndexOfNeither(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2);
pure @safe ptrdiff_t lastIndexOfNeither(Char, Char2)(const(Char)[] haystack, const(Char2)[] needles, in size_t stopIdx, in CaseSensitive cs = Yes.caseSensitive)
Constraints: if (isSomeChar!Char && isSomeChar!Char2); -
Возвращает последний индекс первого вхождения любого символа, не являющегося элементом
needlesвhaystack. Если все элементыhaystackявляются элементамиneedles, возвращается-1.- Parameters:
const(Char)[] haystackСтрока для поиска иголок в ней. const(Char2)[] needlesСтроки для поиска в стоге. size_t stopIdxсрезы стога так haystack[0 .. stopIdx]. Если stopIdx больше или равен длине стога, функция возвращает-1.CaseSensitive csУказывает, чувствительны ли сравнения к регистру.
- Examples:
-
writeln(lastIndexOfNeither("abba", "a")); // 2 writeln(lastIndexOfNeither("def", "f")); // 1
- Examples:
-
writeln(lastIndexOfNeither("def", "rsa", 3)); // -1 writeln(lastIndexOfNeither("abba", "a", 2)); // 1
- pure nothrow @nogc @safe auto representation(Char)(Char[] s)
Constraints: if (isSomeChar!Char); -
Возвращает представление строки, имеющее тот же тип, что и строка, за исключением того, что тип символа заменён на
ubyte,ushort, илиuintв зависимости от ширины символа.- Parameters:
Char[] sСтрока, для которой нужно вернуть представление.
- Returns:
- Представление переданной строки.
- Examples:
-
string s = "hello"; static assert(is(typeof(representation(s)) == immutable(ubyte)[])); assert(representation(s) is cast(immutable(ubyte)[]) s); writeln(representation(s)); // [0x68, 0x65, 0x6c, 0x6c, 0x6f]
- pure @trusted S capitalize(S)(S input)
Constraints: if (isSomeString!S); -
Приводит первый символ
sк верхнему регистру, а остальные символыsк нижнему регистру.- Parameters:
S inputСтрока, которую нужно привести к верхнему регистру.
- Returns:
- Строка в верхнем регистре.
- See Also:
-
std.uni.asCapitalizedдля ленивой версии диапазона, которая не выделяет память
- Examples:
-
writeln(capitalize("hello")); // "Hello" writeln(capitalize("World")); // "World"
- alias KeepTerminator = std.typecons.Flag!"keepTerminator".Flag;
pure @safe C[][] splitLines(C)(C[] s, KeepTerminator keepTerm = No.keepTerminator)
Constraints: if (isSomeChar!C); -
Разделяет
sна массив строк в соответствии со стандартом Unicode, используя'\r','\n',"\r\n",std.uni.lineSep,std.uni.paraSep,U+0085(NEL),'\v'и'\f'в качестве разделителей. ЕслиkeepTermустановлено вKeepTerminator.yes, то разделитель включается в возвращаемые строки.Не выбрасывает исключения при некорректном UTF; такой символ просто передается в выходные данные без изменений.
Выделяет память; используйтеlineSplitterдля альтернативы, которая этого не делает.
Соответствует Unicode 7.0.- Parameters:
C[] sстрока chars,wchars, илиdchars, или любой пользовательский тип, который преобразуется в типstringKeepTerminatorkeepTermвключать или не включать разделитель в результаты
- Returns:
- массив строк, каждый элемент которого представляет собой строку, являющуюся фрагментом
s
- See Also:
-
lineSplitterstd.algorithm.splitterstd.regex.splitter
- Examples:
-
string s = "Hello\nmy\rname\nis"; writeln(splitLines(s)); // ["Hello", "my", "name", "is"]
- auto lineSplitter(KeepTerminator keepTerm = No.keepTerminator, Range)(Range r)
Constraints: if (hasSlicing!Range && hasLength!Range && isSomeChar!(ElementType!Range) && !isSomeString!Range);
auto lineSplitter(KeepTerminator keepTerm = No.keepTerminator, C)(C[] r)
Constraints: if (isSomeChar!C);
-
Разделить массив или срезу символов на ряд строк, используя
'\r','\n','\v','\f',"\r\n",std.uni.lineSep,std.uni.paraSepи'\u0085'(NEL) в качестве разделителей. ЕслиkeepTermустановлено в значениеYes.keepTerminator, то разделитель включается в возвращаемые срезы.Не выбрасывает исключение при некорректном UTF; подобное просто передается в выходные данные без изменений.
Соответствует Unicode 7.0.
Не выделяет память.- Параметры:
Диапазон rмассив chars,wchars, илиdcharsили срез диапазонаkeepTerm включать ли разделитель в результаты
- Возвращает:
- диапазон срезов входного диапазона
r
- См. также:
-
splitLinesstd.algorithm.splitterstd.regex.splitter
- Примеры:
-
import std.array : array; string s = "Hello\nmy\rname\nis"; /* notice the call to 'array' to turn the lazy range created by lineSplitter comparable to the string[] created by splitLines. */ writeln(lineSplitter(s).array); // splitLines(s)
- Примеры:
-
auto s = "\rpeter\n\rpaul\r\njerry\u2028ice\u2029cream\n\nsunday\nmon\u2030day\n"; auto lines = s.lineSplitter(); static immutable witness = ["", "peter", "", "paul", "jerry", "ice", "cream", "", "sunday", "mon\u2030day"]; uint i; foreach (line; lines) { writeln(line); // witness[i++] } writeln(i); // witness.length
- auto stripLeft(Range)(Range input)
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && !isInfinite!Range && !isConvertibleToString!Range);
auto stripLeft(Range, Char)(Range input, const(Char)[] chars)
Constraints: if ((isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) || isConvertibleToString!Range) && isSomeChar!Char); -
Удаляет начальные пробелы (определяемые
std.uni.isWhite) или, как указано во втором аргументе.- Параметры:
Диапазон inputстрока или последовательный диапазон символов const(Char)[] charsстрока символов для удаления
- Возвращает:
-
inputбез начальных пробелов или символов, указанных во втором аргументе.
- Послеусловие
-
inputи возвращаемое значение будут иметь одинаковый хвост (см.std.array.sameTail).
- См. также:
- Общие операции удаления для диапазонов:
std.algorithm.mutation.stripLeft
- Примеры:
-
import std.uni : lineSep, paraSep; assert(stripLeft(" hello world ") == "hello world "); assert(stripLeft("\n\t\v\rhello world\n\t\v\r") == "hello world\n\t\v\r"); assert(stripLeft(" \u2028hello world") == "hello world"); assert(stripLeft("hello world") == "hello world"); assert(stripLeft([lineSep] ~ "hello world" ~ lineSep) == "hello world" ~ [lineSep]); assert(stripLeft([paraSep] ~ "hello world" ~ paraSep) == "hello world" ~ [paraSep]); import std.array : array; import std.utf : byChar; assert(stripLeft(" hello world "w.byChar).array == "hello world "); assert(stripLeft(" \u2022hello world ".byChar).array == "\u2022hello world ");
- Примеры:
-
assert(stripLeft(" hello world ", " ") == "hello world "); assert(stripLeft("xxxxxhello world ", "x") == "hello world "); assert(stripLeft("xxxyy hello world ", "xy ") == "hello world ");
- Примеры:
-
import std.array : array; import std.utf : byChar, byWchar, byDchar; assert(stripLeft(" xxxyy hello world "w.byChar, "xy ").array == "hello world "); assert(stripLeft("\u2028\u2020hello world\u2028"w.byWchar, "\u2028").array == "\u2020hello world\u2028"); assert(stripLeft("\U00010001hello world"w.byWchar, " ").array == "\U00010001hello world"w); assert(stripLeft("\U00010001 xyhello world"d.byDchar, "\U00010001 xy").array == "hello world"d); writeln(stripLeft("\u2020hello"w, "\u2020"w)); // "hello"w writeln(stripLeft("\U00010001hello"d, "\U00010001"d)); // "hello"d writeln(stripLeft(" hello ", "")); // " hello "
- auto stripRight(Range)(Range str)
Constraints: if (isSomeString!Range || isRandomAccessRange!Range && hasLength!Range && hasSlicing!Range && !isConvertibleToString!Range && isSomeChar!(ElementEncodingType!Range));
auto stripRight(Range, Char)(Range str, const(Char)[] chars)
Constraints: if ((isBidirectionalRange!Range && isSomeChar!(ElementEncodingType!Range) || isConvertibleToString!Range) && isSomeChar!Char); -
Удаляет хвостовые пробелы (определяемые
std.uni.isWhite) или как указано во втором аргументе.- Параметры:
Диапазон strстрока или диапазон с произвольным доступом символов const(Char)[] charsстрока символов для удаления
- Возвращает:
- срез
strбез хвостовых пробелов или символов, указанных во втором аргументе.
- См. также:
- Общие операции удаления для диапазонов:
std.algorithm.mutation.stripRight
- Примеры:
-
import std.uni : lineSep, paraSep; assert(stripRight(" hello world ") == " hello world"); assert(stripRight("\n\t\v\rhello world\n\t\v\r") == "\n\t\v\rhello world"); assert(stripRight("hello world") == "hello world"); assert(stripRight([lineSep] ~ "hello world" ~ lineSep) == [lineSep] ~ "hello world"); assert(stripRight([paraSep] ~ "hello world" ~ paraSep) == [paraSep] ~ "hello world");
- Примеры:
-
assert(stripRight(" hello world ", "x") == " hello world "); assert(stripRight(" hello world ", " ") == " hello world"); assert(stripRight(" hello worldxy ", "xy ") == " hello world");
- auto strip(Range)(Range str)
Constraints: if (isSomeString!Range || isRandomAccessRange!Range && hasLength!Range && hasSlicing!Range && !isConvertibleToString!Range && isSomeChar!(ElementEncodingType!Range));
auto strip(Range, Char)(Range str, const(Char)[] chars)
Constraints: if ((isBidirectionalRange!Range && isSomeChar!(ElementEncodingType!Range) || isConvertibleToString!Range) && isSomeChar!Char);
auto strip(Range, Char)(Range str, const(Char)[] leftChars, const(Char)[] rightChars)
Constraints: if ((isBidirectionalRange!Range && isSomeChar!(ElementEncodingType!Range) || isConvertibleToString!Range) && isSomeChar!Char); -
Удаляет начальные и хвостовые пробелы (определяемые
std.uni.isWhite) или как указано во втором аргументе.- Параметры:
Диапазон strстрока или диапазон с произвольным доступом символов const(Char)[] charsстрока символов для удаления const(Char)[] leftCharsстрока начальных символов для удаления const(Char)[] rightCharsстрока хвостовых символов для удаления
- Возвращает:
- срез
strбез начальных и хвостовых пробелов или символов, указанных во втором аргументе.
- См. также:
- Общие операции удаления для диапазонов:
std.algorithm.mutation.strip
- Примеры:
-
import std.uni : lineSep, paraSep; assert(strip(" hello world ") == "hello world"); assert(strip("\n\t\v\rhello world\n\t\v\r") == "hello world"); assert(strip("hello world") == "hello world"); assert(strip([lineSep] ~ "hello world" ~ [lineSep]) == "hello world"); assert(strip([paraSep] ~ "hello world" ~ [paraSep]) == "hello world");
- Примеры:
-
assert(strip(" hello world ", "x") == " hello world "); assert(strip(" hello world ", " ") == "hello world"); assert(strip(" xyxyhello worldxyxy ", "xy ") == "hello world"); writeln(strip("\u2020hello\u2020"w, "\u2020"w)); // "hello"w writeln(strip("\U00010001hello\U00010001"d, "\U00010001"d)); // "hello"d writeln(strip(" hello ", "")); // " hello "
- Примеры:
-
writeln(strip("xxhelloyy", "x", "y")); // "hello" assert(strip(" xyxyhello worldxyxyzz ", "xy ", "xyz ") == "hello world"); writeln(strip("\u2020hello\u2028"w, "\u2020"w, "\u2028"w)); // "hello"w assert(strip("\U00010001hello\U00010002"d, "\U00010001"d, "\U00010002"d) == "hello"d); writeln(strip(" hello ", "", "")); // " hello "
- Range chomp(Range)(Range str)
Constraints: if ((isRandomAccessRange!Range && isSomeChar!(ElementEncodingType!Range) || isNarrowString!Range) && !isConvertibleToString!Range);
Range chomp(Range, C2)(Range str, const(C2)[] delimiter)
Constraints: if ((isBidirectionalRange!Range && isSomeChar!(ElementEncodingType!Range) || isNarrowString!Range) && !isConvertibleToString!Range && isSomeChar!C2); -
Если
strзаканчивается наdelimiter, то возвращаетсяstrбезdelimiterв конце. Если оноstrне заканчивается наdelimiter, то возвращается без изменений.Если не указан
delimiter, то удаляется один конечный'\r','\n',"\r\n",'\f','\v',std.uni.lineSep,std.uni.paraSep, илиstd.uni.nelSepиз концаstr. Еслиstrне заканчивается ни на один из этих символов, то возвращается без изменений.- Параметры:
Диапазон strстрока или индексируемый диапазон символов const(C2)[] delimiterстрока символов, которые нужно убрать с конца str[]
- Возвращает:
- срез str
- Примеры:
-
import std.uni : lineSep, paraSep, nelSep; import std.utf : decode; writeln(chomp(" hello world \n\r")); // " hello world \n" writeln(chomp(" hello world \r\n")); // " hello world " writeln(chomp(" hello world \f")); // " hello world " writeln(chomp(" hello world \v")); // " hello world " writeln(chomp(" hello world \n\n")); // " hello world \n" writeln(chomp(" hello world \n\n ")); // " hello world \n\n " writeln(chomp(" hello world \n\n" ~ [lineSep])); // " hello world \n\n" writeln(chomp(" hello world \n\n" ~ [paraSep])); // " hello world \n\n" writeln(chomp(" hello world \n\n" ~ [nelSep])); // " hello world \n\n" writeln(chomp(" hello world")); // " hello world" writeln(chomp("")); // "" writeln(chomp(" hello world", "orld")); // " hello w" writeln(chomp(" hello world", " he")); // " hello world" writeln(chomp("", "hello")); // "" // Don't decode pointlessly writeln(chomp("hello\xFE", "\r")); // "hello\xFE"
- Range chompPrefix(Range, C2)(Range str, const(C2)[] delimiter)
Constraints: if ((isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) || isNarrowString!Range) && !isConvertibleToString!Range && isSomeChar!C2); -
Если
strначинается сdelimiter, то возвращается частьstrпослеdelimiter. Еслиstrне начинается сdelimiter, то возвращается без изменений.- Параметры:
Диапазон strстрока или последовательный диапазон символов const(C2)[] delimiterстрока символов, которые нужно убрать с начала str[]
- Возвращает:
- срез str
- Примеры:
-
writeln(chompPrefix("hello world", "he")); // "llo world" writeln(chompPrefix("hello world", "hello w")); // "orld" writeln(chompPrefix("hello world", " world")); // "hello world" writeln(chompPrefix("", "hello")); // ""
- Range chop(Range)(Range str)
Constraints: if ((isBidirectionalRange!Range && isSomeChar!(ElementEncodingType!Range) || isNarrowString!Range) && !isConvertibleToString!Range); -
Возвращает
strбез последнего символа, если таковой имеется. Еслиstrзаканчивается на"\r\n", то оба удаляются. Еслиstrпуста, то возвращается без изменений.- Параметры:
Диапазон strстрока (должна быть валидным UTF)
- Возвращает:
- срез str
- Примеры:
-
writeln(chop("hello world")); // "hello worl" writeln(chop("hello world\n")); // "hello world" writeln(chop("hello world\r")); // "hello world" writeln(chop("hello world\n\r")); // "hello world\n" writeln(chop("hello world\r\n")); // "hello world" writeln(chop("Walter Bright")); // "Walter Brigh" writeln(chop("")); // ""
- S leftJustify(S)(S s, size_t width, dchar fillChar = ' ')
Constraints: if (isSomeString!S); -
Выровнять
sпо левому краю в поле ширинойwidthсимволов.fillChar— символ, используемый для заполнения пробелов в поле, которыеsне заполняет.- Параметры:
S sстрока size_t widthминимальная ширина поля dchar fillCharиспользуется для заполнения до widthсимволов
- Возвращает:
- выделенная строка GC
- См. также:
-
leftJustifier, которая не выделяет память
- Примеры:
-
writeln(leftJustify("hello", 7, 'X')); // "helloXX" writeln(leftJustify("hello", 2, 'X')); // "hello" writeln(leftJustify("hello", 9, 'X')); // "helloXXXX"
- auto leftJustifier(Range)(Range r, size_t width, dchar fillChar = ' ')
Constraints: if (isInputRange!Range && isSomeChar!(ElementEncodingType!Range) && !isConvertibleToString!Range);
-
Выравнивание по левому краю
sв поле ширинойwidthсимволов.fillChar— это символ, который будет использоваться для заполнения пробелов в поле, которыеsне заполнит.- Параметры:
Диапазон rстрока или диапазон символов size_t widthминимальная ширина поля dchar fillCharиспользуется для дополнения до widthсимволов
- Возвращаемое значение:
- ленивый диапазон результата, выровненного по левому краю
- См. также:
rightJustifier
- Примеры:
-
import std.algorithm.comparison : equal; import std.utf : byChar; assert(leftJustifier("hello", 2).equal("hello".byChar)); assert(leftJustifier("hello", 7).equal("hello ".byChar)); assert(leftJustifier("hello", 7, 'x').equal("helloxx".byChar));
- S rightJustify(S)(S s, size_t width, dchar fillChar = ' ')
Constraints: if (isSomeString!S); -
Выравнивание по правому краю
sв поле ширинойwidthсимволов.fillChar— это символ, который будет использоваться для заполнения пробелов в поле, которыеsне заполнит.- Параметры:
S sстрока size_t widthминимальная ширина поля dchar fillCharиспользуется для дополнения до widthсимволов
- Возвращаемое значение:
- строка, выделенная в памяти GC
- См. также:
-
rightJustifier, которая не выделяет память
- Примеры:
-
writeln(rightJustify("hello", 7, 'X')); // "XXhello" writeln(rightJustify("hello", 2, 'X')); // "hello" writeln(rightJustify("hello", 9, 'X')); // "XXXXhello"
- auto rightJustifier(Range)(Range r, size_t width, dchar fillChar = ' ')
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && !isConvertibleToString!Range); -
Выравнивание по правому краю
sв поле ширинойwidthсимволов.fillChar— это символ, который будет использоваться для заполнения пробелов в поле, которыеsне заполнит.- Параметры:
Диапазон rстрока или прямой диапазон символов size_t widthминимальная ширина поля dchar fillCharиспользуется для дополнения до widthсимволов
- Возвращаемое значение:
- ленивый диапазон результата, выровненного по правому краю
- См. также:
leftJustifier
- Примеры:
-
import std.algorithm.comparison : equal; import std.utf : byChar; assert(rightJustifier("hello", 2).equal("hello".byChar)); assert(rightJustifier("hello", 7).equal(" hello".byChar)); assert(rightJustifier("hello", 7, 'x').equal("xxhello".byChar));
- S center(S)(S s, size_t width, dchar fillChar = ' ')
Constraints: if (isSomeString!S); -
Центрирование
sв поле ширинойwidthсимволов.fillChar— это символ, который будет использоваться для заполнения пробелов в поле, которыеsне заполнит.- Параметры:
S sСтрока, которую нужно центрировать size_t widthШирина поля, в котором нужно центрировать sdchar fillCharСимвол, используемый для заполнения лишнего места в поле
- Возвращаемое значение:
- Результат центрирования строки. Возвращаемая строка выделяется в памяти GC. Чтобы избежать выделения памяти, используйте
centerJustifierвместо этого.
- Примеры:
-
writeln(center("hello", 7, 'X')); // "XhelloX" writeln(center("hello", 2, 'X')); // "hello" writeln(center("hello", 9, 'X')); // "XXhelloXX"
- auto centerJustifier(Range)(Range r, size_t width, dchar fillChar = ' ')
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && !isConvertibleToString!Range); -
Центрирование
rв поле ширинойwidthсимволов.fillChar— это символ, который будет использоваться для заполнения пробелов в поле, которыеrне заполнит.- Параметры:
Диапазон rстрока или прямой диапазон символов size_t widthминимальная ширина поля dchar fillCharиспользуется для дополнения до widthсимволов
- Возвращаемое значение:
- ленивый диапазон результата, центрированного по центру
- См. также:
-
leftJustifierrightJustifier
- Примеры:
-
import std.algorithm.comparison : equal; import std.utf : byChar; assert(centerJustifier("hello", 2).equal("hello".byChar)); assert(centerJustifier("hello", 8).equal(" hello ".byChar)); assert(centerJustifier("hello", 7, 'x').equal("xhellox".byChar));
- pure auto detab(Range)(auto ref Range s, size_t tabSize = 8)
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) || __traits(compiles, StringTypeOf!Range)); -
Заменяет каждый символ табуляции в
sна необходимое количество пробелов для выравнивания следующего символа на следующей позиции табуляции.- Параметры:
Диапазон sстрока size_t tabSizeрасстояние между позициями табуляции
- Возвращаемое значение:
- строка, выделенная в памяти GC, с заменёнными табуляциями на пробелы
- Примеры:
-
writeln(detab(" \n\tx", 9)); // " \n x"
- auto detabber(Range)(Range r, size_t tabSize = 8)
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && !isConvertibleToString!Range); -
Заменяет каждый символ табуляции в
rна необходимое количество пробелов для выравнивания следующего символа на следующей позиции табуляции.- Параметры:
Диапазон rстрока или прямой диапазон size_t tabSizeрасстояние между позициями табуляции
- Возвращаемое значение:
- ленивый прямой диапазон с заменёнными табуляциями на пробелы
- Примеры:
-
import std.array : array; writeln(detabber(" \n\tx", 9).array); // " \n x"
- auto entab(Range)(Range s, size_t tabSize = 8)
Constraints: if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range)); -
Заменяет пробелы в
sна оптимальное количество символов табуляции. Все пробелы и табуляции в конце строки удаляются.- Параметры:
Диапазон sСтрока для преобразования. size_t tabSizeКолонки табуляции находятся на расстоянии tabSizeпробелов друг от друга.
- Возвращаемое значение:
- строка, выделенная в памяти GC, с заменёнными пробелами на табуляции; используйте
entabber, чтобы не выделять память.
- См. также:
entabber
- Примеры:
-
writeln(entab(" x \n")); // "\tx\n"
- auto entabber(Range)(Range r, size_t tabSize = 8)
Constraints: if (isForwardRange!Range && !isConvertibleToString!Range); -
Заменяет пробелы в диапазоне
rна оптимальное количество символов табуляции. Все пробелы и табуляции в конце строки удаляются.- Параметры:
Диапазон rстрока или прямой диапазон size_t tabSizeрасстояние между позициями табуляции
- Возвращаемое значение:
- ленивый прямой диапазон с заменёнными пробелами на табуляции
- См. также:
entab
- Примеры:
-
import std.array : array; writeln(entabber(" x \n").array); // "\tx\n"
- pure @safe C1[] translate(C1, C2 = immutable(char))(C1[] str, in dchar[dchar] transTable, const(C2)[] toRemove = null)
Constraints: if (isSomeChar!C1 && isSomeChar!C2);
pure @safe C1[] translate(C1, S, C2 = immutable(char))(C1[] str, in S[dchar] transTable, const(C2)[] toRemove = null)
Constraints: if (isSomeChar!C1 && isSomeString!S && isSomeChar!C2); -
Заменяет символы в
str, которые являются ключами вtransTable, на соответствующие значения вtransTable.transTable— это AA, ключами которого являютсяdchar, а значениями — либоdchar, либо какой-то тип строки. Кроме того, еслиtoRemoveзадано, символы в нём удаляются изstrперед переводом.strсамо не изменяется. Возвращается копия с изменениями.- См. также:
-
tr,std.array.replace,std.algorithm.iteration.substitute
- Параметры:
C1[] strИсходная строка. dchar[dchar] transTableAA, указывающий, какие символы заменить и на что. const(C2)[] toRemoveСимволы, которые нужно удалить из строки.
- Примеры:
-
dchar[dchar] transTable1 = ['e' : '5', 'o' : '7', '5': 'q']; writeln(translate("hello world", transTable1)); // "h5ll7 w7rld" writeln(translate("hello world", transTable1, "low")); // "h5 rd" string[dchar] transTable2 = ['e' : "5", 'o' : "orange"]; writeln(translate("hello world", transTable2)); // "h5llorange worangerld"
- void translate(C1, C2 = immutable(char), Buffer)(const(C1)[] str, in dchar[dchar] transTable, const(C2)[] toRemove, Buffer buffer)
Constraints: if (isSomeChar!C1 && isSomeChar!C2 && isOutputRange!(Buffer, C1));
void translate(C1, S, C2 = immutable(char), Buffer)(C1[] str, in S[dchar] transTable, const(C2)[] toRemove, Buffer buffer)
Constraints: if (isSomeChar!C1 && isSomeString!S && isSomeChar!C2 && isOutputRange!(Buffer, S));
-
Это перегрузка
translate, которая принимает существующий буфер для записи содержимого.- Параметры:
const(C1)[] strИсходная строка. dchar[dchar] transTableAA, указывающий, какие символы заменить и на какие. const(C2)[] toRemoveСимволы для удаления из строки. Buffer bufferДиапазон вывода для записи содержимого.
- Примеры:
-
import std.array : appender; dchar[dchar] transTable1 = ['e' : '5', 'o' : '7', '5': 'q']; auto buffer = appender!(dchar[])(); translate("hello world", transTable1, null, buffer); writeln(buffer.data); // "h5ll7 w7rld" buffer.clear(); translate("hello world", transTable1, "low", buffer); writeln(buffer.data); // "h5 rd" buffer.clear(); string[dchar] transTable2 = ['e' : "5", 'o' : "orange"]; translate("hello world", transTable2, null, buffer); writeln(buffer.data); // "h5llorange worangerld"
- pure nothrow @trusted C[] translate(C = immutable(char))(scope const(char)[] str, scope const(char)[] transTable, scope const(char)[] toRemove = null)
Constraints: if (is(immutable(C) == immutable(char))); -
Это только ASCII перегрузка
translate. Она не будет работать с Unicode. Она существует как оптимизация для случаев, когда обработка Unicode не требуется.В отличие от других перегрузок
translate, эта не принимает AA. Вместо этого она принимаетstring, сгенерированныйmakeTransTable.
Массив, сгенерированныйmakeTransTable, имеет длину256элементов, где индекс равен заменяемому ASCII-символу, а значение — символу, на который он заменяется. Обратите внимание, что translate не декодирует символы, поэтому вы можете передавать расширенные ASCII-символы (в ASCII фактически используются128символов), но будьте осторожны, что расширенные ASCII-символы не являются допустимыми Unicode и, следовательно, могут привести к ошибкеUTFExceptionот большинства других функций Phobos.
Также, так как декодирования не происходит, эту перегрузку можно использовать для транслирования ASCII-символов в строке UTF-8, не изменяя другие, не-ASCII символы. Она заменяет любой код больше127на другой код или заменяет любой код на другой код больше127, что вызовет проблемы с валидацией UTF.- См. также:
-
tr,std.array.replace,std.algorithm.iteration.substitute
- Параметры:
const(char)[] strИсходная строка. const(char)[] transTableСтрока, указывающая, какие символы заменить и на какие. Она генерируется makeTransTable.const(char)[] toRemoveСимволы для удаления из строки.
- Примеры:
-
auto transTable1 = makeTrans("eo5", "57q"); writeln(translate("hello world", transTable1)); // "h5ll7 w7rld" writeln(translate("hello world", transTable1, "low")); // "h5 rd"
- pure nothrow @trusted string makeTrans(scope const(char)[] from, scope const(char)[] to);
-
Выполняет то же, что и
makeTransTable, но выделяет таблицу трансляции в куче GC.Используйте
makeTransTableвместо этого.- Примеры:
-
auto transTable1 = makeTrans("eo5", "57q"); writeln(translate("hello world", transTable1)); // "h5ll7 w7rld" writeln(translate("hello world", transTable1, "low")); // "h5 rd"
- pure nothrow @nogc @safe char[256] makeTransTable(scope const(char)[] from, scope const(char)[] to);
-
Создает таблицу трансляции из 256 символов, где символы в from[] заменяются соответствующими символами в to[].
- Параметры:
const(char)[] fromМассив символов, длина которого меньше или равна 256. const(char)[] toСоответствующий массив символов для трансляции.
- Возвращает:
- Массив трансляции
- Примеры:
-
writeln(translate("hello world", makeTransTable("hl", "q5"))); // "qe55o wor5d" writeln(translate("hello world", makeTransTable("12345", "67890"))); // "hello world"
- pure @trusted void translate(C = immutable(char), Buffer)(scope const(char)[] str, scope const(char)[] transTable, scope const(char)[] toRemove, Buffer buffer)
Constraints: if (is(immutable(C) == immutable(char)) && isOutputRange!(Buffer, char)); -
Это только ASCII перегрузка
translate, которая принимает существующий буфер для записи содержимого.- Параметры:
const(char)[] strИсходная строка. const(char)[] transTableСтрока, указывающая, какие символы заменить и на какие. Она генерируется makeTransTable.const(char)[] toRemoveСимволы для удаления из строки. Buffer bufferДиапазон вывода для записи содержимого.
- Примеры:
-
import std.array : appender; auto buffer = appender!(char[])(); auto transTable1 = makeTransTable("eo5", "57q"); translate("hello world", transTable1, null, buffer); writeln(buffer.data); // "h5ll7 w7rld" buffer.clear(); translate("hello world", transTable1, "low", buffer); writeln(buffer.data); // "h5 rd"
- pure @safe S succ(S)(S s)
Constraints: if (isSomeString!S); -
Возвращает строку, являющуюся 'преемником' s[]. Если крайний правый символ — a-zA-Z0-9, он инкрементируется в своем регистре или в качестве цифры. Если это приводит к переносу, процесс повторяется для символа слева от него.
- Примеры:
-
writeln(succ("1")); // "2" writeln(succ("9")); // "10" writeln(succ("999")); // "1000" writeln(succ("zz99")); // "aaa00"
- C1[] tr(C1, C2, C3, C4 = immutable(char))(C1[] str, const(C2)[] from, const(C3)[] to, const(C4)[] modifiers = null);
-
Заменяет символы в
str, которые находятся вfrom, на соответствующие символы вtoи возвращает результирующую строку.trоснована на Posix's tr, хотя она не делает всего, что делает утилита Posix.- Параметры:
C1[] strИсходная строка. const(C2)[] fromСимволы для замены. const(C3)[] toСимволы для замены на. const(C4)[] modifiersСтрока, содержащая модификаторы.
- Модификаторы
Если модификаторМодификатор Описание 'c'Дополнить список символов в from'd'Удалить соответствующие символы без соответствующей замены в to's'Удалить смежные дубликаты в замененных символах 'd'присутствует, то количество символов вtoможет быть только0или1. Если модификатор'd'не присутствует, аtoпуста, тоtoсчитается таким же, какfrom. Если модификатор'd'не присутствует, аtoкорочеfrom, тоtoрасширяется за счет дублирования последнего символа вto. Иfrom, иtoмогут содержать диапазоны, используя символ'-'(например,"a-d"эквивалентно"abcd"). Ни один из них не принимает ведущий'^'как означающий дополнение строки (используйте модификатор'c'для этого).- См. также:
-
translate,std.array.replace,std.algorithm.iteration.substitute
- Примеры:
-
writeln(tr("abcdef", "cd", "CD")); // "abCDef" writeln(tr("1st March, 2018", "March", "MAR", "s")); // "1st MAR, 2018" writeln(tr("abcdef", "ef", "", "d")); // "abcd" writeln(tr("14-Jul-87", "a-zA-Z", " ", "cs")); // " Jul "
- bool isNumeric(S)(S s, bool bAllowSep = false)
Constraints: if (isSomeString!S || isRandomAccessRange!S && hasSlicing!S && isSomeChar!(ElementType!S) && !isInfinite!S); -
Принимает строку
sи определяет, представляет ли она число. Эта функция также принимает необязательный параметрbAllowSep, который будет принимать разделители','и'__'в строке. Но эти символы должны быть удалены из строки перед использованием каких-либо функций преобразования, таких какto!int(),to!float(), и т. д., иначе произойдет ошибка.Также обратите внимание, что в строке не допускаются пробелы, будь то ведущие, заключительные или вставленные, поэтому их тоже необходимо удалить из строки перед использованием этой функции или каких-либо функций преобразования.
- Параметры:
S sстрока или диапазон случайного доступа для проверки bool bAllowSepпринять разделители или нет
- Возвращает:
bool
- Примеры:
- Целое целое число: (byte, ubyte, short, ushort, int, uint, long, и ulong) ['+'|'-']цифра(ы)[U|L|UL]
assert(isNumeric("123")); assert(isNumeric("123UL")); assert(isNumeric("123L")); assert(isNumeric("+123U")); assert(isNumeric("-123L"));
- Примеры:
- Число с плавающей точкой: (float, double, real, ifloat, idouble, и ireal) ['+'|'-']цифра(ы)[.][цифра(ы)][[e-|e+]цифра(ы)][i|f|L|Li|fi]] или [nan|nani|inf|-inf]
assert(isNumeric("+123")); assert(isNumeric("-123.01")); assert(isNumeric("123.3e-10f")); assert(isNumeric("123.3e-10fi")); assert(isNumeric("123.3e-10L")); assert(isNumeric("nan")); assert(isNumeric("nani")); assert(isNumeric("-inf"));
- Примеры:
- Число с плавающей точкой: (cfloat, cdouble, и creal) ['+'|'-']цифра(ы)[.][цифра(ы)][[e-|e+]цифра(ы)][+] [цифра(ы)[.][цифра(ы)][[e-|e+]цифра(ы)][i|f|L|Li|fi]] или [nan|nani|nan+nani|inf|-inf]
enum a = isNumeric("123.00E-5+1234.45E-12Li"); enum b = isNumeric("12345xxxx890"); static assert( a); static assert(!b);
- Примеры:
- isNumeric работает с CTFE
enum a = isNumeric("123.00E-5+1234.45E-12Li"); enum b = isNumeric("12345xxxx890"); static assert( a); static assert(!b);
- char[4] soundexer(Range)(Range str)
Constraints: if (isInputRange!Range && isSomeChar!(ElementEncodingType!Range) && !isConvertibleToString!Range);
char[4] soundexer(Range)(auto ref Range str)
Constraints: if (isConvertibleToString!Range);
-
Алгоритм Soundex.
Алгоритм Soundex преобразует слово в 4 символа на основе того, как слово звучит фонетически. Идея в том, что два написания, которые звучат одинаково, будут иметь одинаковое значение Soundex, что означает, что Soundex может использоваться для неточного сопоставления имен.
- Параметры:
Диапазон strСтрока или диапазон ввода для преобразования в представление Soundex.
- Возвращает:
- Массив из четырёх символов с результатом Soundex. В массиве содержатся нули, если для строки нет представления Soundex.
- См. также:
-
Википедия, Система индексирования Soundex
soundex
- Примечание
- Хорошо работает только с английскими именами.
- Примеры:
-
writeln(soundexer("Gauss")); // "G200" writeln(soundexer("Ghosh")); // "G200" writeln(soundexer("Robert")); // "R163" writeln(soundexer("Rupert")); // "R163" writeln(soundexer("0123^&^^**&^")); // ['\0', '\0', '\0', '\0']
- pure nothrow @safe char[] soundex(scope const(char)[] str, char[] buffer = null);
-
Подобно
soundexer, но с другими параметрами и значением возврата.- Параметры:
const(char)[] strСтрока для преобразования в представление Soundex. char[] bufferНеобязательный массив из 4 символов для размещения полученных символов Soundex. Если null, буфер для возвращаемого значения будет выделен в куче.
- Возвращает:
- Массив из четырёх символов с результатом Soundex. Возвращает null, если для строки нет представления Soundex.
- См. также:
soundexer
- Примеры:
-
writeln(soundex("Gauss")); // "G200" writeln(soundex("Ghosh")); // "G200" writeln(soundex("Robert")); // "R163" writeln(soundex("Rupert")); // "R163" writeln(soundex("0123^&^^**&^")); // null
- pure @safe string[string] abbrev(string[] values);
-
Создать ассоциативный массив, состоящий из всех аббревиатур, которые однозначно сопоставляются со строками в values.
Это полезно в тех случаях, когда ожидается, что пользователь введет одну из известного набора строк, и программа поможет автоматически завершить строку, как только будет введено достаточное количество символов, однозначно ее идентифицирующих.
- Примеры:
-
import std.string; static string[] list = [ "food", "foxy" ]; auto abbrevs = abbrev(list); assert(abbrevs == ["fox": "foxy", "food": "food", "foxy": "foxy", "foo": "food"]);
- size_t column(Range)(Range str, in size_t tabsize = 8)
Constraints: if ((isInputRange!Range && isSomeChar!(Unqual!(ElementEncodingType!Range)) || isNarrowString!Range) && !isConvertibleToString!Range); -
Вычислить номер столбца в конце выведенной формы строки, предполагая, что строка начинается в крайнем левом столбце, который нумеруется, начиная с 0.
Символы табуляции расширяются на достаточное количество пробелов для приведения номера столбца к следующему кратному значению tabsize. Если в строке несколько строк, возвращается номер столбца последней строки.
- Параметры:
Диапазон strСтрока или диапазон ввода для анализа size_t tabsizeКоличество столбцов, которое представляет собой символ табуляции
- Возвращает:
- номер столбца
- Примеры:
-
import std.utf : byChar, byWchar, byDchar; writeln(column("1234 ")); // 5 writeln(column("1234 "w)); // 5 writeln(column("1234 "d)); // 5 writeln(column("1234 ".byChar())); // 5 writeln(column("1234 "w.byWchar())); // 5 writeln(column("1234 "d.byDchar())); // 5 // Tab stops are set at 8 spaces by default; tab characters insert enough // spaces to bring the column position to the next multiple of 8. writeln(column("\t")); // 8 writeln(column("1\t")); // 8 writeln(column("\t1")); // 9 writeln(column("123\t")); // 8 // Other tab widths are possible by specifying it explicitly: writeln(column("\t", 4)); // 4 writeln(column("1\t", 4)); // 4 writeln(column("\t1", 4)); // 5 writeln(column("123\t", 4)); // 4 // New lines reset the column number. writeln(column("abc\n")); // 0 writeln(column("abc\n1")); // 1 writeln(column("abcdefg\r1234")); // 4 writeln(column("abc\u20281")); // 1 writeln(column("abc\u20291")); // 1 writeln(column("abc\u00851")); // 1 writeln(column("abc\u00861")); // 5
- S wrap(S)(S s, in size_t columns = 80, S firstindent = null, S indent = null, in size_t tabsize = 8)
Constraints: if (isSomeString!S); -
Разбить текст на абзацы.
Входная строка текста s формируется в абзац, разбивая ее на последовательность строк, разделяемых \n, таким образом, чтобы количество столбцов на каждой строке не превышало заданного. Последняя строка завершается \n.
- Параметры:
S sстрока текста, которая должна быть разбита на абзацы size_t columnsмаксимальное количество столбцов в абзаце S firstindentстрока, используемая для отступа первой строки абзаца S indentстрока для использования в качестве отступа следующих строк абзаца size_t tabsizeинтервал столбцов табуляции в firstindent[] и indent[]
- Возвращает:
- результирующий абзац в виде выделенной строки
- Примеры:
-
writeln(wrap("a short string", 7)); // "a short\nstring\n" // wrap will not break inside of a word, but at the next space writeln(wrap("a short string", 4)); // "a\nshort\nstring\n" writeln(wrap("a short string", 7, "\t")); // "\ta\nshort\nstring\n" writeln(wrap("a short string", 7, "\t", " ")); // "\ta\n short\n string\n"
- pure @safe S outdent(S)(S str)
Constraints: if (isSomeString!S); -
Удаляет один уровень отступа из многострочной строки.
Это равномерно выравнивает текст как можно сильнее. Лишь содержащие пробелы строки всегда преобразуются в пустые строки.
Память не выделяется, если она не выбрасывает исключение.- Параметры:
S strмногострочная строка
- Возвращает:
- строка с удаленным отступом
- Исключения:
- StringException, если отступ выполнен с помощью различных последовательностей символов пробела.
- Примеры:
-
enum pretty = q{ import std.stdio; void main() { writeln("Hello"); } }.outdent(); enum ugly = q{ import std.stdio; void main() { writeln("Hello"); } }; writeln(pretty); // ugly
- pure @safe S[] outdent(S)(S[] lines)
Constraints: if (isSomeString!S); -
Удаляет один уровень отступа из массива однострочных строк.
Это равномерно выравнивает текст как можно сильнее. Лишь содержащие пробелы строки всегда преобразуются в пустые строки.
- Параметры:
S[] linesмассив однострочных строк
- Возвращает:
- lines[] переписывается на месте с удаленными отступами
- Исключения:
- StringException, если отступ выполнен с помощью различных последовательностей символов пробела.
- Примеры:
-
auto str1 = [ " void main()\n", " {\n", " test();\n", " }\n" ]; auto str1Expected = [ "void main()\n", "{\n", " test();\n", "}\n" ]; writeln(str1.outdent); // str1Expected auto str2 = [ "void main()\n", " {\n", " test();\n", " }\n" ]; writeln(str2.outdent); // str2
- auto assumeUTF(T)(T[] arr)
Constraints: if (staticIndexOf!(immutable(T), immutable(ubyte), immutable(ushort), immutable(uint)) != -1); -
Предполагается, что данный массив целых чисел
arr— это правильно сформированная строка UTF, и она возвращается в виде строки UTF.ubyteстановитсяchar,ushortстановитсяwcharиuintстановитсяdchar. Квалификаторы типов сохраняются.
При компиляции в отладочном режиме эта функция выполняет дополнительную проверку, чтобы убедиться, что возвращаемое значение — это корректная строка Юникода.- Параметры:
T[] arrмассив байтов, ubyte, short, ushort, int или uint
- Возвращает:
- arr, переведенный в массив char, wchar или dchar
- Исключения:
- В отладочном режиме
AssertError, когда результат не является правильно сформированной строкой UTF.
- См. также:
representation
- Примеры:
-
string a = "Hölo World"; immutable(ubyte)[] b = a.representation; string c = b.assumeUTF; writeln(c); // "Hölo World"
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_string.html