c# - 从全名中删除中间名,并以大写字母开头
问题描述
下午好!我的功能有问题。我需要获取中间名或全名,例如:“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# 中回答这个问题。
根据空格拆分名称,并取第一个和最后一个元素。我在这里使用三元条件,但是一个简单的 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));
推荐阅读
- angularjs - 仅使用 Angularjs 和发送网格从联系我们表单发送电子邮件而没有后端 API
- reactjs - 在外部 API 服务层中使用 React 钩子
- apache-kafka - 无法与 Kafka 集群上的特定消费者组一起消费
- random - NIST 的二进制输入文件序列
- reactjs - 拒绝服务 - http 代理 - React
- python - 如何检测类中的pygame表面上的点击
- java - 当“\n”设置为分隔符时,为什么我的扫描仪正在读取“'B'和\n”而不是“B”?
- c++ - C++17,初始化数组
- java - Spring:无法从服务器下载文件(FileInputStream)
- java - 分块然后合并jar文件时面临问题