0

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

誰かがこれに対する解決策を知っていますか? ありがとう、下手な英語でごめんなさい!

4

2 に答える 2

0

slip メソッドを使用して文字列を文字列配列に分割し、この配列内の各文字列について、それが前置詞であるかどうか、最初の文字のみを大文字に置き換えないかどうかを確認できます (間にある場合は、文字から 32 を引くことができます)。 97 および 122 - 小文字の ASCII 文字)

于 2013-09-21T20:17:42.620 に答える
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;
    }
}
于 2013-09-21T20:23:57.097 に答える