Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

dmd.root.string

Contains various string related functions.
Authors:
pure nothrow @nogc inout(char)[] toDString(inout(char)* s);
Slices a \0-terminated C-string, excluding the terminator
static pure nothrow @nogc bool iequals(const(char)[] s1, const(char)[] s2);
Compare two slices for equality, in a case-insensitive way
Comparison is based on char and does not do decoding. As a result, it's only really accurate for plain ASCII strings.
Parameters:
const(char)[] s1 string to compare
const(char)[] s2 string to compare
Returns:
true if s1 == s2 regardless of case
nothrow auto toCStringThen(alias dg)(const(char)[] src);
Copy the content of src into a C-string ('\0' terminated) then call dg
The intent of this function is to provide an allocation-less way to call a C function using a D slice. The function internally allocates a buffer if needed, but frees it on exit.

Note The argument to dg is scope. To keep the data around after dg exits, one has to copy it.

Parameters:
const(char)[] src Slice to use to call the C function
dg Delegate to call afterwards
Returns:
The return value of T
nothrow char[] toCString(scope const(char)[] s);
Convert a D string to a C string by allocating memory, copying it, and adding a terminating 0.
Parameters:
const(char)[] s string to copy

Result 0-terminated copy of s

pure nothrow @nogc @safe string stripLeadingLineTerminator(string str);
Strips one leading line terminator of the given string.
The following are what the Unicode standard considers as line terminators:
NameD Escape SequenceUnicode Code Point
Line feed\nU+000A
Line tabulation\vU+000B
Form feed\fU+000C
Carriage return\rU+000D
Next lineU+0085
Line separatorU+2028
Paragraph separatorU+2029
This function will also strip \r\n.
@trusted int dstrcmp()(scope const char[] s1, scope const char[] s2);
A string comparison functions that returns the same result as strcmp

Note Strings are compared based on their ASCII values, no UTF-8 decoding.

Some C functions (e.g. qsort) require a int result for comparison.

See Also:
Druntime's core.internal.string
char[N + 1] toStaticArray(size_t N)(scope const(char)[N] literal);
Infers the length N of a string literal and coerces its type to a static array with length N + 1. Returns the string with a null character appended to the end.
Parameters:
const(char)[N] literal string literal

Notes

Examples:
auto m = "123".toStaticArray;
const c = "123".toStaticArray;
immutable i = "123".toStaticArray;
enum e = "123".toStaticArray;

assert(m == "123\0");
assert(c == "123\0");
assert(i == "123\0");
static assert(e == "123\0");

const empty = "".toStaticArray;
static assert(empty.length == 1);
static assert(empty[0] == '\0');
pure nothrow @nogc @system bool startsWith(scope const(char)* p, scope const(char)[] needle);

pure nothrow @nogc @safe bool startsWith(scope const(char)[] str, scope const(char)[] prefix);
Checks if C string p starts with needle.
Parameters:
const(char)* p the C string to check
const(char)[] needle the string to look for
Returns:
true if p starts with needle
Examples:
const buf = "123".toStaticArray;
const ptr = &buf[0];
assert(ptr.startsWith(""));
assert(ptr.startsWith("1"));
assert(ptr.startsWith("12"));
assert(ptr.startsWith("123"));
assert(!ptr.startsWith("1234"));
auto splitLines(const char[] text);
Take text and turn it into an InputRange that emits slices into text for each line.
Parameters:
char[] text array of characters
Returns:
InputRange accessing text as a sequence of lines

Reference std.string.splitLines()

FindSplit findSplit(return scope const(char)[] str, scope const(char)[] needle);
Find a substring in a string and split the string into before and after parts.
Parameters:
const(char)[] str string to look into
const(char)[] needle substring to find in str (must not be empty)
Returns:
a FindSplit object that casts to true iff needle was found inside str. In that case, split[1] is the needle, and split[0]/split[2] are before/after the needle.
const(char)[] findBetween(const(char)[] str, const(char)[] l, const(char)[] r);
Find a string inbetween two substrings
Parameters:
const(char)[] str string to look into
const(char)[] l substring to find on the left
const(char)[] r substring to find on the right
Returns:
substring of str inbetween l and r