想要替换字符串c#中的单个字母

时间:2013-09-21 20:05:21

标签: c# string replace uppercase

我想在c#中验证名称字段。 我的目标是大写名字和姓氏的第一个字母但是 保留介词(在我的语言中有名称中的“de”,“da”,“dos”等介词) 小写的。 我做了一些东西,但问题是我正在使用Replace(),如果一个名字以“l”开头,那么每个“l”都会很大,例如:

“喜欢de lol的湖”将是“Lake Like de LoL”

私人字符串nome;

        public string Nome
        {
            get { return nome; }
            set 
            {
                value = value.ToLower();
                value = value.Replace(value[0].ToString(), value[0].ToString().ToUpper());
                for (int i = 0; i < value.Length; i++)
                {
                    if (value[i].ToString() == " " && String.Concat(value[i + 1], value[i + 2], value[i + 3]) != "de " && String.Concat(value[i + 1], value[i + 2], value[i + 3]) != "da " && String.Concat(value[i + 1], value[i + 2], value[i + 3]) != "dos " && String.Concat(value[i + 1], value[i + 2], value[i + 3]) != "das " && String.Concat(value[i + 1], value[i + 2], value[i + 3]) != "  ")
                    {
                        value = value.Replace(value[i + 1].ToString(), value[i + 1].ToString().ToUpper());
                    }
                }

                nome = value;
            }
        }

有人知道解决方案吗?谢谢,抱歉英语不好!

2 个答案:

答案 0 :(得分:0)

您可以使用slip方法将字符串拆分为字符串数组,然后对此数组中的每个字符串进行检查以检查它是否为介词,以及是否仅使用大写字母替换第一个字母(可以从char中减去32)如果它在97和122之间 - 小写字母Ascii字符)

答案 1 :(得分:0)

这是我为你写的一个例子,它使用一个单词列表来不大写。

class Program
{
    static List<string> listOfPrepositions = new List<string>()
        {
            "de",
            "da",
            "dos"
        };

    static void Main(string[] args)
    {
        var somestring = "asdf aaa Asdf";
        Console.WriteLine(UppercaseName(somestring));
        Console.ReadLine();
    }

    static string UppercaseName(string fullName)
    {
        var split = fullName.Split(' ');
        var returnedName = "";

        foreach (var name in split)
        {
            if (name.Length == 0)
                continue;

            if (listOfPrepositions.Where(p => p.Equals(name)).Count() > 0)
            {
                returnedName += name + " ";
                continue; // skip if it's a preposition
            }

            // Set the first character in the string to be uppercase
            returnedName += char.ToUpper(name[0]) + name.Substring(1) + " ";

        }
        returnedName.TrimEnd(' ');
        return returnedName;
    }
}