【问题标题】:Want to replace one single letter in a string c#想要替换字符串中的一个字母c#
【发布时间】:2013-09-27 00:56:08
【问题描述】:

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

“Lake Like de Lol”将是“Lake Like de LoL”

私有字符串名称;

        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;
            }
        }

有没有人知道这个问题的解决方案?感谢和抱歉英语不好!

【问题讨论】:

    标签: c# string replace uppercase


    【解决方案1】:

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

    【讨论】:

    • 但是这样做,如果有像第一个这样的其他字母,它们不会也是大写吗?比如:“卢卡斯”->“卢卡斯”。好的!但是“保存”->“保存”。不好 D:
    • 如果您再次查看我的答案并查看您接受的 Freeqaz 的答案,您会发现他的解决方案正是我提出的解决方案的确切实施!
    【解决方案2】:

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

    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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 1970-01-01
      • 2023-03-23
      • 2012-05-31
      • 2020-08-27
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多