diff --git a/src/Tingle.Extensions.Primitives/Extensions/StringProtectionExtensions.cs b/src/Tingle.Extensions.Primitives/Extensions/StringProtectionExtensions.cs index a6487a4..b53c732 100644 --- a/src/Tingle.Extensions.Primitives/Extensions/StringProtectionExtensions.cs +++ b/src/Tingle.Extensions.Primitives/Extensions/StringProtectionExtensions.cs @@ -21,7 +21,7 @@ public enum StringProtectionPosition End, } -/// Extension methods for . +/// Extension methods for for protection. public static partial class StringProtectionExtensions { /// diff --git a/src/Tingle.Extensions.Primitives/Extensions/StringSplitExtensions.cs b/src/Tingle.Extensions.Primitives/Extensions/StringSplitExtensions.cs new file mode 100644 index 0000000..58efb41 --- /dev/null +++ b/src/Tingle.Extensions.Primitives/Extensions/StringSplitExtensions.cs @@ -0,0 +1,23 @@ +using System.Text.RegularExpressions; + +namespace System; + +/// Extension methods for for splitting. +public static partial class StringSplitExtensions +{ + /// + /// Split a string in Pascal casing into multiple words by adding the specified . + /// + /// + /// + /// + public static string PascalSplit(this string source, string separator = " ") + { + ArgumentNullException.ThrowIfNull(source); + + return GetPascalSplitFormat().Replace(source, separator); + } + + [GeneratedRegex(@"(?<=[A-Za-z])(?=[A-Z][a-z])|(?<=[a-z0-9])(?=[0-9]?[A-Z])")] + private static partial Regex GetPascalSplitFormat(); +} diff --git a/tests/Tingle.Extensions.Primitives.Tests/Extensions/StringSplitExtensionsTests.cs b/tests/Tingle.Extensions.Primitives.Tests/Extensions/StringSplitExtensionsTests.cs new file mode 100644 index 0000000..12b4fbb --- /dev/null +++ b/tests/Tingle.Extensions.Primitives.Tests/Extensions/StringSplitExtensionsTests.cs @@ -0,0 +1,14 @@ +namespace Tingle.Extensions.Modeling.Tests; + +public class StringSplitExtensionsTests +{ + [Theory] + [InlineData("HomeAndAway", " ", "Home And Away")] + [InlineData("HomeAndAway", "_", "Home_And_Away")] + [InlineData("Chickensoup", " ", "Chickensoup")] + public void PascalSplit_works(string original, string separator, string expected) + { + var actual = original.PascalSplit(separator); + Assert.Equal(expected, actual); + } +}