我想在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;
}
}
有人知道解决方案吗?谢谢,抱歉英语不好!
答案 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;
}
}