首页 > 解决方案 > 从全名中删除中间名,并以大写字母开头

问题描述

下午好!我的功能有问题。我需要获取中间名或全名,例如:“mikael da conceição souza luz”。- 结果应该是:“mikael light”。但是,我还需要用大写字母的第一个字母将结果保留在相同的出口处,例如:“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;
        }
    }
}

AQUI É O RESULTADO EM ASSERT.AREEQUAL QUE DEVE SER COMO RESULTADO:

标签: c#

解决方案


这看起来像 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)); 

推荐阅读