C# Capitalize lines

Date: 2023-07-25
using System.Text.RegularExpressions;

public class Program
{
    public static int FirstIndexMatch<T>(IEnumerable<T> items, Func<T, bool> matchCondition)
    {
        var index = 0;
        foreach (var item in items)
        {
            if(matchCondition(item)) return index;
            index++;
        }
        return -1;
    }

    public static string UppercaseFirst(string s)
    {
        var chars = s.ToCharArray();
        var idx = FirstIndexMatch(chars, Char.IsLetter);
        if (idx >= 0)
            chars[idx] = Char.ToUpper(chars[idx]);
        return new string (chars);
    }

    public static string CapitalizeLine(Match match) => UppercaseFirst(match.Value);

    public static string CapitalizeLines(string text)
    {
        var evaluator = new MatchEvaluator(CapitalizeLine);
        return Regex.Replace(text, @".*?\s[^\s\.]+\.\s", evaluator, RegexOptions.IgnorePatternWhitespace);   
    }

    public static void Main()
    {    
        var text = string.Join(Environment.NewLine, new string[] {
            "lorem ipsum do.no.capitalize 4.5 dolor sit amet, consectetur n.v.t. adipiscing elit. morbi massa massa, ullamcorper vitae pellentesque sed, rhoncus vel elit. nunc id libero id elit congue aliquet nec id ligula. pellentesque magna lectus, sagittis vitae enim eget, tempor dictum quam. duis ut odio non magna rhoncus viverra. donec neque eros, congue et ornare sed, dapibus at purus. nullam congue scelerisque velit, ac porttitor lorem porta finibus. maecenas mauris diam, vulputate eu nulla quis, iaculis mollis augue. proin eget leo sit amet tortor congue eleifend ac quis turpis.",
            "",
            "etiam EXISTING CAPS elementum, erat nec luctus cursus, erat nibh ullamcorper lacus, quis mattis tortor lorem quis risus. nullam eu pellentesque elit, ut ultrices nunc. donec interdum dolor turpis, eu tempus dui molestie eget. aliquam ornare elementum mauris, ac dapibus lacus elementum vitae. cras justo ipsum, aliquet quis molestie non, rutrum laoreet dui. vestibulum in porttitor nibh. nullam scelerisque, turpis sit amet pretium ornare, diam risus pharetra nisl, at convallis enim sem vitae nisl. nulla purus lorem, tempus quis purus vel, luctus interdum turpis.",
            "",
            "fusce vestibulum sapien mauris, et fringilla velit rhoncus ac. quisque volutpat justo vel sem vestibulum pretium. nullam feugiat non lacus id sollicitudin. nulla turpis eros, cursus molestie aliquet eget, scelerisque in velit. suspendisse blandit, nibh placerat sagittis egestas, ante ipsum volutpat metus, ut dapibus felis tellus ac leo. nam pulvinar, enim quis egestas vulputate, lorem mi malesuada nisi, a semper ligula velit suscipit tellus. ut quis mauris nec leo blandit fringilla at et diam. mauris eget egestas justo. sed euismod, purus vitae scelerisque eleifend, magna magna facilisis lectus, id eleifend eros dui feugiat diam. phasellus condimentum varius tincidunt. sed sit amet lorem vel nibh mollis tristique ac ac est. praesent sit amet mauris ornare, pretium tellus et, luctus nisi.",
            "",
            "nam placerat lacus vitae ante convallis, quis porta sapien aliquet. in condimentum ultricies tortor. etiam feugiat odio vel quam tincidunt semper. lorem ipsum dolor sit amet, consectetur adipiscing elit. nunc molestie molestie magna, et porta purus accumsan quis. vestibulum ultricies ante nunc, id vehicula orci aliquet ac. phasellus finibus mollis libero, in dapibus nisi blandit semper. vivamus interdum eu est ut pellentesque. nunc ultrices mi eu eleifend blandit. duis quis libero velit.",
            "",
            "donec pretium nec nisl sit amet efficitur. aenean efficitur, nunc id eleifend condimentum, ipsum tellus sagittis dolor, a laoreet purus elit sed sapien. nulla vulputate justo id tellus bibendum, ac ullamcorper lacus feugiat. nullam tempus lacus cursus, venenatis magna at, viverra sapien. pellentesque interdum vulputate enim, in sodales lectus dignissim eu. vivamus convallis leo ac lectus blandit scelerisque. nam at massa vitae leo tempor placerat ut sed est. praesent vehicula, dui id bibendum faucibus, massa risus ullamcorper tellus, sed imperdiet nulla est quis augue.",
            "",
            "vivamus maximus viverra nulla, fringilla sagittis dui faucibus sit amet. curabitur tempor turpis id dapibus ultrices. nunc aliquam egestas vehicula. curabitur lacinia malesuada facilisis. nulla lectus tellus, egestas imperdiet risus a, posuere tincidunt risus. suspendisse tempus rutrum neque ac ornare. fusce ut urna malesuada, posuere lacus ut, volutpat elit. praesent feugiat quam et lacus vulputate egestas. aliquam lacinia posuere eleifend. proin tincidunt erat tortor.",
            "",
            "curabitur lorem arcu, eleifend ut auctor ut, convallis vitae lectus. donec libero enim, dignissim eget pharetra vel, sodales id velit. praesent imperdiet risus libero, at euismod ligula pharetra sit amet. aliquam aliquet nulla eget ipsum rutrum, sed ultricies nunc imperdiet. aliquam luctus euismod purus in maximus. proin tristique libero ut commodo auctor. morbi aliquet orci risus, in cursus nisl pulvinar nec. donec ipsum nulla, rhoncus id suscipit a, maximus sit amet arcu. pellentesque facilisis porta velit. proin vestibulum consectetur sodales.",
            "",
            "vivamus mollis, velit vitae euismod maximus, ex dolor pretium ante, sit amet sagittis erat libero id arcu. etiam gravida purus mi, ac tristique ipsum efficitur at. ut a velit gravida, ultrices ex quis, elementum dolor. etiam sit amet diam a massa pulvinar porta. vivamus eleifend molestie consectetur. curabitur eu aliquet elit, non maximus mi. proin molestie mauris sagittis nisi rutrum ultrices. "
        });
    
        var result = CapitalizeLines(text);
        Console.WriteLine(result);
    }
}

79920cookie-checkC# Capitalize lines