Preciso de ajuda para construir um programa em Java - utilizando a classe JOptionPane (do pacote javax.swing) para tratamento de Caixas de Diálogos ? que receba um nome completo e mostre o nome ABREVIADO. Por exemplo:
nome = Pedro Ernesto Santos da Silva
abreviatura = Pedro E. S. da Silva
Eu tenho uma função pra eliminar espaços em branco antes e depois da digitação, e tratamento de erros de digitação;
Preciso de uma função nesse código que faça as abreviações propriamente ditas;
import javax.swing.JOptionPane;
public class Abrevia {
public static String s;
final static String ESPACO = " ";
private static String retiraEspacos(String nomeAux) {
int i = 0;
while ((nomeAux.substring(i,i+1)).equals(ESPACO))
i++;
nomeAux = nomeAux.substring(i,nomeAux.length());
if (nomeAux.length() != 1) {
i = nomeAux.length() - 1;
while ((nomeAux.substring(i-1,i)).equals(ESPACO))
i--;
nomeAux = nomeAux.substring(0,i+1);
}
return nomeAux;
}
public static void main(String args[]) {
boolean erro;
do {
erro = false;
try {
s = JOptionPane.showInputDialog(null,"Entre com o nome completo: ");
s = Abrevia.retiraEspacos(s);
}
catch (Exception e) {
erro = true;
JOptionPane.showMessageDialog(null,"Nome inválido, redigite!!","Diálogo de Erro",JOptionPane.ERROR_MESSAGE);
}
} while (erro == true); // repete ate que nome digitado seja valido
JOptionPane.showMessageDialog(null,"conteudo: " + s,"RESPOSTA",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
algoritmo:
1 - trima a String dos dois lados (esquerdo e direito)
2 - dá um split na String
3 - percorre o Array concatenando os elementos da seguinte form:
3.1 - se for o elemento 0 significa que é o primeiro nome.
3.2 - se for o ultimo elemento significa que é o último nome
3.3 - caso contrário pode ser nomes intermediários ou conjunções
3.3.1 - nome intermediario - recupera a primeira letra do nome
3.3.2 - conjunção - nao concatena com a string
fim do algoritmo.
Ajudou ?¿[/list][/list]
Me Introsando…
Bem, o que eh um “SPLIT” e o que faz?
8O
String.split(String var);
bom explicando, o split vai retornar um array de strings (String[]), ou seja, acada var(leia-se variável acima) que ele achar ele retira o que tem antes e guarda em uma posição do array.
ex:
String eg = "Juliano;Carniel;Lindo";
String[] retorno = eg.split(";");
System.out.prinln(retorno[0]+" "+retorno[1]+" "+retorno[2]);
execute isso e vc saberá o resultado =) :lol: 8)
cya!!
e como eu faço para pegar somente a primeira letra do retorno[1] por exemplo?
use o método chatAt(int index) para retornar o caracter de uma String.
tipo assim
String nome = "Daniel";
char letra = nome.charAt(0);
return letra;
isso te retornaria a letra D, poid o indice 0 da String “Daniel” é o “D”.
o exemplo q o jujo mostrou é mto bom, pq criou um array de String contendo cada palavra…
vc pode fazer um loop verificando cada String do array e pegando a primeira com o charAt()
espero ter ajudado!
Abraços!
aee!
toma ae o código prontinho! ta quentinho acabei de fazer! :lol: :lol:
import javax.swing.*;
class Nomes
{
public static void main(String args[])
{
String nomeInteiro = JOptionPane.showInputDialog(null,"Entre com o nome completo: ");
nomeInteiro = nomeInteiro.replace(' ',';');
String nomePedacos[] = nomeInteiro.split(";");
int k;
String saida="";
for(k=0 ; k<nomePedacos.length ; k++)
{
if(k == 0 || k == (nomePedacos.length-1))
saida = saida + nomePedacos[k];
else
saida = saida + " " + nomePedacos[k].charAt(0) + " ";
}
JOptionPane.showMessageDialog(null,saida);
System.exit(0);
}
}
aí vc pode implemetar uns detalhes a mais, tipo nao se abrevia o “dos” de “dos santos”… e essas outras coisinhas…
mas aí ja é com vc! 8) 8) ![:smiley: :smiley:](https://www.guj.com.br/images/emoji/twitter/smiley.png?v=9)
flw!
Perfeito Daniel, valeu mesmo. Só tenho uma dúvida, o que é, o que faz esse replace (nomeInteiro = nomeInteiro.replace(’ ‘,’;’); )?
o replace server pra tocar os caracteres de uma string…
nesse caso, ele pega todos os espaços em branco e transforma em ponto-e-virgula “;”…
ou seja, no final da execução dessa linha, a String nomeInteiro vai ficar com o nome da pessoa com as palavras separadas por ponto-e-virgula…
fiz isso pra depois o médoto split() poder separar cada palavra num array de strings…
mas eu acho, nao tenho certeza, q nem precisaria fazer esse replace… era só no split() indicar um espaço como parametro…
tipo asim
String nomePedacos[] = nomeInteiro.split(" ");
mas eu nao sei se o split aceita um espaço como parametro… e como eu to sem saco pra testar agora
aí depois eu vejo…
mas o importante é q funciona… hehehe
qualquer dúvida, posta ae q agente responde!
flw!