从全名中删除中间名,并以大写字母开头



我需要获取一个或多个全名的中间名,例如:"mikael da conceição souza luz"。 - 结果应该出来:"米凯尔光"。 但是,我还需要将结果保留为相同的退出,第一个字母为大写字母,例如:"Mikael Luz"。 我有以下代码作为源代码,之后的代码是测试类,其中预期的结果必须命中源代码。 你可以帮我吗? 谢谢。

namespace TesteArgo
{
public class teste3
{
//ESSA FUNÇÃO É A QUE EU USO PARA TRANSFORMAR LETRAS MINUSCULAS EM MAIUSCULAS NO NOME.
public string NomesComPrimeirasLetrasMaiusculas(string nome)
{
string[] excecoes = new string[] { "e", "de", "da", "do", "dos" };
var palavras = new Queue<string>();
foreach(var palavra in nome.Split(' '))
{
if (!string.IsNullOrEmpty(palavra))
{var emMinusculo = palavra.ToLower();
var letras = emMinusculo.ToCharArray();
if (!excecoes.Contains(emMinusculo)) letras[0] = char.ToUpper(letras[0]);
palavras.Enqueue(new string(letras));
}
}
return string.Join(" ", palavras);
}

//ESSA É A FUNÇÃO QUE USO PARA REMOVER OS NOMES DO MEIO DE UM NOME COMPLETO, PORÉM NÃO CONSIGO APLICAR AS DUAS FUNÇÕES JUNTAS.
public string RemoverNomeDoMeio(string nome)
{   string nomeCompleto = "cleber reis pereira";
string primeiroNome = "";
string sobreNome = "";
string[] arrayNome = nomeCompleto.Split(' ');
if (arrayNome[arrayNome.Length - 2].Length < 4)
{
//percorro o array e enquanto o campo não for o penúltimo eu incluo na variável primeiroNome
for (int i = 0; i < arrayNome.Length - 2; i++)
{
primeiroNome += arrayNome[i] + " ";
}
//percorro o array a partir do penúltimo campo e incluo os valores na variável sobreNome
for (int i = arrayNome.Length - 2; i <= arrayNome.Length - 1; i++)
{
sobreNome += arrayNome[i] + " ";
}
//aqui é só colocar a saída dos dados, lembrando de eliminar os espaços em branco no início e 
//fim das variáveis
}
teste3 teste = new teste3();
var test1 = teste.NomesComPrimeirasLetrasMaiusculas(nome);          

return test1;
}
}
}

这看起来像 C#,所以我将在 C# 中回答这个问题。

根据空格拆分名称,并采用第一个和最后一个元素。我在这里使用三元条件,但一个简单的 if-else 结构也可以正常工作。

var arrayNome = nomeCompleto.Split(' ');
var primeiroNome = arrayNome.Count() != 0? arrayNome[0] : String.Empty; // Empty if there are no words (nomeCompleto is empty).
var sobreNome = arrayNome.Count() > 1? arrayNome[arrayNome.Count()-1] : String.Empty; // Empty if there is only one word or no words at all.

接下来,返回两个名称(如果不是空),首字母大写。有一个方便的开箱即用功能。

return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(String.Join(" ", primeiroNome, sobreNome)); 

最新更新