How to get a substring?

Jakob Ovrum jakobovrum at gmail.com
Sun Oct 27 00:44:04 PDT 2013


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!

There are a lot of good answers in this thread but I also think 
they miss the real issue here.

When working with Unicode, you'll want to stop thinking in terms 
of indices, in order to produce correct code. Getting a 
sub-string by passing indices is a means to an end; you'll want 
to replace the index paradigm with an approach that does not rely 
on indices.

Working with indices where the smallest unit is a code point 
(dchar), which has been suggested in this thread, is still not 
good enough because you'll either a) potentially break up 
grapheme clusters, which can have disastrous results, or b) end 
up redundantly searching through the string to find the correct 
code point positions.

With Phobos, you can use algorithms such as `find` and the 
`findSplit` family of algorithms to do string manipulation 
without using indices, and the cool thing about this approach is 
that as long as the input strings are properly formed UTF and 
have intact grapheme clusters, it's impossible to get 
Unicode-incorrect results!

When working with ASCII, just slice.


More information about the Digitalmars-d-learn mailing list