How would I change the string
aboutUs
To
about-us
I'd like to be able to do this with regex replace if possible. I've tried:
public static string ToHypenCase(this string source) {
    return Regex.Replace(source, @"[A-Z]", "-$1");
}
                You can do it with a combination of regex and ToLower(), like this:
string s = "quickBrownFoxJumpsOverTheLazyDog";
string res = Regex.Replace(s, @"([a-z])([A-Z])", "$1-$2").ToLower();
Console.WriteLine(res);
Demo on ideone.
If you need fast solution with low allocation (it handles also @PeterL cases):
public static string ConvertFromCamelCaseToDashSyntax(string text)
{
    var buffer = ArrayPool<char>.Shared.Rent(text.Length + 10); // define max size of the internal buffer, 10 = max 10 segments
    try
    {      
        var resultLength = 0;
        for (var i = 0; i < text.Length; i++)
        {
            if (char.IsUpper(text[i]) && i > 0)
            {
                buffer[resultLength++] = '-';  
            }
            buffer[resultLength++] = char.ToLowerInvariant(text[i]);
        }
        return new string(buffer.AsSpan().Slice(0, resultLength));
    }
    finally
    {
        ArrayPool<char>.Shared.Return(buffer);
    }
}
Benchmark:
| Method | Text | Mean | Error | StdDev | Ratio | Gen 0 | Allocated | 
|---|---|---|---|---|---|---|---|
| UsingRegex | quick(...)zyDog [32] | 1,894.7 ns | 2.38 ns | 2.11 ns | 1.00 | 0.0114 | 208 B | 
| UsingArrayPoolAndSpans | quick(...)zyDog [32] | 106.3 ns | 0.23 ns | 0.20 ns | 0.06 | 0.0062 | 104 B | 
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With