How to get a substring?

Namespace rswhite4 at googlemail.com
Sat Oct 26 16:19:55 PDT 2013


On Saturday, 26 October 2013 at 22:17:33 UTC, Ali Çehreli wrote:
> On 10/26/2013 02:25 PM, Namespace wrote:
>> On Saturday, 26 October 2013 at 21:23:13 UTC, Gautam Goel 
>> wrote:
>>> Dumb Newbie Question: I've searched through the library 
>>> reference, but
>>> I haven't figured out how to extract a substring from a 
>>> string. I'd
>>> like something like string.substring("Hello", 0, 2) to return 
>>> "Hel",
>>> for example. What method am I looking for? Thanks!
>>
>> Use slices:
>>
>> string msg = "Hello";
>> string sub = msg[0 .. 2];
>
> Yes but that works only if the string is known to contain only 
> ASCII codes. (Otherwise, a string is a collection of UTF-8 code 
> units.)
>
> I could not find a subString() function either but it turns out 
> to be trivial to implement with Phobos:
>
> import std.range;
> import std.algorithm;
>
> auto subRange(R)(R s, size_t beg, size_t end)
> {
>     return s.dropExactly(beg).take(end - beg);
> }
>
> unittest
> {
>     assert("abcçdef".subRange(2, 4).equal("cç"));
> }
>
> void main()
> {}
>
> That function produces a lazy range. To convert it eagerly to a 
> string:
>
> import std.conv;
>
> string subString(string s, size_t beg, size_t end)
> {
>     return s.subRange(beg, end).text;
> }
>
> unittest
> {
>     assert("Hello".subString(0, 2) == "He");
> }
>
> Ali

Yeah that is of course easier and nicer than C++... :D Just 
kidding. I think the slice should be enough. This example would 
have deterred me from further use if I had seen it it in my 
beginning.


More information about the Digitalmars-d-learn mailing list