String extensions¶
Helpers for common string manipulation tasks: filtering characters, extracting head/tail segments, trimming from either end, and rendering strings as hexadecimal. All methods are extension methods on string and return new strings (do not mutate the original).
See also - ASCII Mnemonic Expansion — show control characters as mnemonics (e.g., \<CR>)
Clean: remove unwanted characters¶
Removes all characters that appear in the supplied clean set and preserves the rest.
Notes
- If source is null or empty, returns string.Empty.
- If clean is null or empty, returns source unchanged.
- Complexity is O(n × m) where n is the source length and m is clean.Length. A HashSet can be faster when clean is very large, but for typical small sets the simple approach is competitive.
Keep: keep only wanted characters¶
The inverse of Clean. Keeps only characters that appear in the supplied keep set and removes all others.
Notes
- If source is null or empty, returns string.Empty.
Head: take the first N characters¶
Returns the first length characters of the string.
Exceptions
- ArgumentNullException if source is null.
- ArgumentOutOfRangeException if length < 0 or length > source.Length.
Tail: take the last N characters¶
Returns the last length characters of the string.
Exceptions
- ArgumentOutOfRangeException if length > source.Length.
RemoveHead: drop N characters from the start¶
Removes length characters from the start; returns the remainder.
Notes
- If length < 1, returns source unchanged.
- If length exceeds the source length, Tail() will throw; ensure the value is within range if you do not want an exception.
RemoveTail: drop N characters from the end¶
Removes length characters from the end; returns the remainder.
Notes
- If length < 1, returns source unchanged.
- If length exceeds the source length, Head() will throw; ensure the value is within range if you do not want an exception.
ToHex: visualise character codes¶
Renders each character’s numeric value in lower‑case hexadecimal, surrounded by braces.
Notes - Useful for diagnostics and debugger output when inspecting non‑printable characters or code points.
Read lines helpers (related)¶
There is a companion set of helpers for splitting a string or stream into lines without allocating the entire array up front.
// From a string
foreach (var line in bigText.GetLines()) { /* ... */ }
// From a stream
await using var fs = File.OpenRead(path);
foreach (var line in fs.GetLines()) { /* ... */ }
Rules
- A line ends at CR (0x0D), LF (0x0A), CRLF, Environment.NewLine, or end‑of‑input; terminators are not included in the returned lines.
See also - ASCII Mnemonic Expansion