KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I wrote this string extension awhile back, and I'm actually getting quite a bit of use out of it. public static string Slice(this string str, int? start = null, int? end = null, int step = 1) { if (step == 0) throw new ArgumentException("Step cannot be zero.", "step"); if (start == null) { if (step > 0) start = 0; else start = str.Length - 1; } else if (start < 0) { if (start < -str.Length) start = 0; else start += str.Length; } else if (start > str.Length) start = str.Length; if (end == null) { if (step > 0) end = str.Length; else end = -1; } else if (end < 0) { if (end < -str.Length) end = 0; else end += str.Length; } else if (end > str.Length) end = str.Length; if (start == end || start < end && step < 0 || start > end && step > 0) return ""; if (start < end && step == 1) return str.Substring((int)start, (int)(end - start)); int length = (int)(((end - start) / (float)step) + 0.5f); var sb = new StringBuilder(length); for (int i = (int)start, j = 0; j < length; i += step, ++j) sb.Append(str[i]); return sb.ToString(); } Since it's in all my projects now, I'm wondering if I could have done it better. More efficient, or would it produce unexpected results in any case? Slice. It works like Python's array notation. "string"[start:end:step] Many other languages have something like this too. string.Slice(1) is equivalent to string.Substring(1) . string.Substring(1,-1) trims off the first and last character. string.Substring(null,null,-1) will reverse the string. string.Substring(step:2) will return a string with every other character... also similar to <a href="http://www.w3schools.com/jsref/jsref_slic
Tags (comma-separated)
Save Edits
Cancel