我用谷歌搜索但是没有运气。
我想要删除字符串的第一个字符:
string s = "hello, world";
string t = cast(string) s[1..$]; // OK
string u = s[1..$]; // ERROR, can't cast char[] to string.
好吧,我可能会错过一些东西。 cast(string)
使代码更难以理解。
有没有更简单的方法来获取子串(没有强制转换)?
答案 0 :(得分:11)
你根本不应该在那里施放,这些都是字符串。
如果s是char[]
,您可以通过指定它来强制它为字符串(就像您在示例中所做的那样),或使用to!string(s)
进行转换。 to!string
位于模块std.conv
中。
在拥有一致类型的所有内容之后,在进行子字符串处理时,切片很好,就像你在那里做的那样,但如果有非ascii字符,你可能会想要小心一点。 string [1 .. $]会删除第一个字节,但字符可能是多个字节。
如果您import std.utf;
,您将拥有一个名为stride
的函数,可以检查多字节字符。
string t = s[s.stride() .. $]; // chops off the first character*, even if it is multi-byte
但是,一般来说,我会说使用其他函数获取索引,然后将其切片。因此,如果您想要子世界,请执行:
import std.string;
auto index = s.indexOf("world");
if(index == -1) throw new Exception("substring 'world' not found");
auto world = s[index .. $]; // gets the substring starting from world to the end of string
像indexOf
这样的函数可以为您处理多字节字符的复杂性。