using System.Globalization;
public static void Main()
var en = CultureInfo.GetCultureInfo("en-US");
var fr = CultureInfo.GetCultureInfo("fr-fr");
Thread.CurrentThread.CurrentUICulture = en;
Console.WriteLine("Hello World".SwapCase());
Console.WriteLine("Hello World".IsAlphanumeric());
Console.WriteLine("123456".IsAlphanumeric());
Console.WriteLine("123a456".IsAlphanumeric('a'));
Console.WriteLine("123b456".IsAlphanumeric('a'));
Console.WriteLine("Test".Center(10, '.'));
Console.WriteLine("Test".Center(15, '.'));
Console.WriteLine("Test".Center(2, '.'));
Console.WriteLine("this is a test".ToTitleCase());
Console.WriteLine("this is a test".IsTitleCase());
Console.WriteLine("This Is A Test".IsTitleCase());
Console.WriteLine("12ab3.45".ValueCount('a'));
Console.WriteLine("23ab4.56".GetDigits());
Console.WriteLine("34ab5.67".GetDigits(true));
Console.WriteLine("45ab6.78".GetDigits(true, en));
Console.WriteLine("56ab7,89".GetDigits(true, en));
Console.WriteLine("67ab8.90".GetDigits(true, fr));
Console.WriteLine("782ab9,01".GetDigits(true, fr));
Console.WriteLine("89ab0.12".GetDouble());
Console.WriteLine("90ab1.23".GetUInt());
Console.WriteLine("01ab2,34".GetDouble(en));
Console.WriteLine("01ab2,34".GetDouble(fr));
public static class StringProcessing
public static string SwapCase(this string value)
=> string.Join(string.Empty, value.Select(c => char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c)));
public static bool IsAlphanumeric(this string value, params char[] ignoreChars)
=> value.All(c => char.IsDigit(c) || ignoreChars.Contains(c));
public static int ValueCount(this string value, char count)
=> value.Where(c => c == count).Count();
public static string Center(this string value, int totalLength, char padChar = ' ')
=> value.PadLeft(((totalLength - value.Length) / 2) + value.Length, padChar).PadRight(totalLength, padChar);
public static string ToTitleCase(this string value)
=> string.Join(' ', value.Split().Select(word => char.ToUpper(word[0]) + word[1..].ToLower()));
public static bool IsTitleCase(this string value)
=> value.Split().All(word => char.IsUpper(word[0]) && word[1..].All(char.IsLower));
public static string GetDigits(this string value, bool allowDecimalSeparator = false, CultureInfo? culture = null)
=> string.Join(string.Empty, value.Where(c => char.IsDigit(c) || (allowDecimalSeparator && IsDecimalSeparator(c, culture))));
public static double GetDouble(this string value, CultureInfo? culture = null)
=> double.Parse(GetDigits(value, true, GetCulture(culture)), GetCulture(culture));
public static uint GetUInt(this string value, CultureInfo? culture = null)
=> uint.Parse(GetDigits(value, false, GetCulture(culture)), GetCulture(culture));
private static bool IsDecimalSeparator(char value, CultureInfo? culture = null)
=> GetCulture(culture).NumberFormat.NumberDecimalSeparator.Equals(value.ToString());
private static CultureInfo GetCulture(CultureInfo? culture = null)
=> culture ?? CultureInfo.CurrentUICulture;