Bom, não to encontrando solução para esse código, tipo eu tenho que pegar um nome completo e imprimir as iniciais em letra maiúscula, tipo joão da silva neto “JSN” mas não to conseguindo as iniciais dos sobrenomes, o primeiro imprime certinho mas o problema tá no resto, não to conseguindo achar uma solução alguém pode me dar uma mãozinha pois sou bem iniciante rsrs
O que consegui até agora foi isso!!
public String acharIniciais (String nome) {
String iniciaisNome = " ";
char letra;
int cont;
for (cont = 0; cont < nome.length(); cont++) {
letra = nome.charAt(0);
iniciaisNome = String.valueOf(letra);
}
iniciaisNome = iniciaisNome.toUpperCase();
return iniciaisNome;
public String acharIniciais(String nome) {
StringBuilder iniciais = new StringBuilder();
for (char letra : nome.toCharArray()) {
if (Character.isUpperCase(letra)) {
iniciais.add(letra);
}
}
return iniciais.toString();
}
String name ="JOão da silVa Neto";
//normalizando a string para ficar sem acentos
name = Normalizer.normalize(name, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
//retirando as preposições. Adicione outras se desejar.
name = name.replaceAll("da|das|do|dos", "");
//retirando todas as palvras exceto a primeira letra e transformando e maiusculo.
name = name.replaceAll("\\B\\w\\s*", "").toUpperCase();
Muito obrigado pela ajuda, mas como disse antes sou bem iniciante em java, ainda não estudei nada sobre array, e ASCII rsrs então essas partes não entendi muito!!
name = name.replaceAll("\\B\\w\\s*", "").toUpperCase();
Também não vi nada sobre StringBuilder, mas vou da uma pesquisada pra ver se entendo a lógica por traz de tudo isso!
Mas mesmo assim agradeço muito vocês!!!
[quote=mtr]Também não vi nada sobre StringBuilder, mas vou da uma pesquisada pra ver se entendo a lógica por traz de tudo isso! Mas mesmo assim agradeço muito vocês!!!
[/quote]
O StringBuilder é só uma classe que concatena Strings de maneira ineficiente. Usar += na classe String dentro de um loop é muito lento. Mas aquele código é equivalente a esse aqui (porém mais rápido):
public String acharIniciais(String nome) {
String iniciais = "";
for (char letra : nome.toCharArray()) {
if (Character.isUpperCase(letra)) {
iniciais += letra;
}
}
return iniciais;
}
[quote=mtr]Muito obrigado pela ajuda, mas como disse antes sou bem iniciante em java, ainda não estudei nada sobre array, e ASCII rsrs então essas partes não entendi muito!!
name = name.replaceAll("\\B\\w\\s*", "").toUpperCase();
[/quote]
Na verdade o que esse código faz é usar expressões regulares. De forma simplista os metacaracteres “\B\w\s*” estão dizendo o seguinte:
\B -> não olhe para o primeiro caracter da palavra.
\w -> olhe para a palavra
\s* -> olhe para o espaço
Juntando essas condições, ocorre o que falamos de casamento “matches”, ou seja:
Pegue todas as palavras (menos sua primeira letra) e espaços, então apague. Como a palavra nesse ponto era: “JOao silva Neto”, logo essa regex irá casar com:
"Oao ", "ilva ", “eto”
O método replaceAll vai localizar esse casamento na string e trocar o conteúdo por “”, ou seja, será apagado.
Resumindo, se você tiver oportunidade, estude expressões regulares, elas existem em praticamente todas as linguagens de programação, e servem para tratamento/transformação/pesquisa de textos. A primeira vista parece maluco esses comandos todos, mas torna teu código muito mais simples, evitando ter que fazer lógicas malucas com vários laços e ifs.
PS: Existem outras regexp para resolver teu problema, está foi apenas uma sugestão didática.