Programa de nomes

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:

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 :stuck_out_tongue: aí depois eu vejo…

mas o importante é q funciona… hehehe

qualquer dúvida, posta ae q agente responde!
flw!