首页 > 解决方案 > 如果名称中的所有字符都是大写的,则在其前面加一个逗号

问题描述

我在程序中使用的名称如下:Jenny BLACK, Helen BROWN EYE, Henna Tamara GREEN. 如果此人有多个名字或多个姓氏,我想在姓氏之前加一个逗号。我怎样才能做到这一点?我们可以通过所有字母都大写来区分字符串是姓氏。

像这样的方法,也许我可以得到我想要的很长的路要走,但听起来一点也不专业。

string author_final = "";
var aut_examp = new List<string>{"Jenny BLACK", "Helen BROWN EYE", "Henna Tamara GREEN"};
if (aut_examp.Count > 1)
{
    var i = 1;
    foreach (var aut in aut_examp)
    {
        var and = i < aut_examp.Count ? "&" : "";

        var explodes = aut.Split(new[] { $" " }, StringSplitOptions.None);

        foreach (var ex in explodes)
        {
            if (ex.All(char.IsUpper) // ...
            // With a method like this, maybe I can get what I want a very long way, but it doesn't sound professional at all.
        }
        author_final += aut + and;
        i++;
    }
}
else
{
    author_final = aut_examp[0];
}

标签: c#string

解决方案


在 LINQ 中,你可以将你的名字分解成单词,然后用“take while name contains lower case chars”、逗号、“skip while name contains lower chars”重新组合它们

new [] {"Jenny BLACK", "Helen BROWN EYE", "Henna Tamara GREEN"}
.Select(n => 
  string.Join(" ", n.Split().TakeWhile(o => o.Any(Char.IsLower))) + 
  ", " + 
  string.Join(" ", n.Split().SkipWhile(o => o.Any(Char.IsLower)))
);

我想我宁愿让正则表达式找到我第一个全大写单词的索引并插入一个逗号..

new [] {"Jenny BLACK", "Helen BROWN EYE", "Henna Tamara GREEN"}
.Select(n => n.Insert(Regex.Match(n, " [A-Z]+\\b").Index, ","))

推荐阅读