Dificuldade no exercício de String. [Resolvido]

3 respostas
F

Glra, to com uma dificuldade no seguinte exercício:

Tenho que imprimir um nome completo no seguinte formato:

Ex.:

Maria de Bragança da Silva Oliveira
Maria B. S. Oliveira

João Pereira Silva Santos
João P. S. Santos

Eu já consegui separar o 1º nome o ultimo nome e os nomes do meio, mas a dificuldade está quando encontra a palavra com letra minuscula (ex.: “de”).

Eis o código:

import java.util.Scanner;
public class Exe04 {
	public static void main(String[] args) {
		Scanner dados = new Scanner(System.in);
		String nome;
		int a = 0, b = 0, c, x;
		System.out.print("Informe o nome completo: ");
		nome = dados.nextLine();
		
//		Separando o 1º nome: 
		for (x = 0; x < nome.length(); x++) {
			if (nome.charAt(x) == ' ') {
				a = x;
				break;
			}
		}

//		Separando o ultimo nome
		for (x = nome.length() - 1; x >= 0; x--) {
			if (nome.charAt(x) == ' ') {
				b = x;
				break;
			}
		}
		
		
		System.out.print(nome.substring(0, a));
//		Separando o/os nomes do meio
		for (c = a; c < b; c++) {
			if (nome.charAt(c) == ' ') {
				if (nome.charAt(c) == 'd') {
					c = c + 2;
				}
				System.out.print(" " + nome.charAt(c+1) + ". ");
			}
		}
		System.out.print(nome.substring(b, nome.length()));
	}
}

Quem tiver a disponibilidade de tempo pra me ajudar, eu agradeço. Vlw.

3 Respostas

davidbuzatto
/**
 *
 * @author David Buzatto
 */
public class Teste {

    /**
     * @param args the command line arguments
     */
    public static void main( String[] args ) {
        
        String[] nomes = {
            "Maria de Bragança da Silva Oliveira",
            "João Pereira Silva Santos",
            "Silvio Santos",
            "Jill Valentine",
            "Maria Joaquina do Carrossel",
            "Cirilo do Carrossel"
        };
        
        for ( String nome : nomes ) {
            System.out.println( abreviarNome( nome ) );
        }
        
        
    }
    
    public static String abreviarNome( String nome ) {
        
        String[] partes = nome.trim().split( " " );
        StringBuilder sb = new StringBuilder();
        
        for ( int i = 0; i < partes.length; i++ ) {
            
            // é a primeira ou a última palavra?
            if ( i == 0 || i == partes.length - 1 ) {
                
                // adiciona a palavra completa
                sb.append( partes[i] ).append( " " );
                
                // palavras intermediárias
            } else {
                
                // obtém a primeira letra
                char primeiraLetra = partes[i].charAt( 0 );
                
                // verifica se a primeira letra é maiúscula
                if ( Character.isUpperCase( primeiraLetra ) ) {
                    
                    // se for, adiciona a letra e um ponto
                    sb.append( primeiraLetra ).append( ". " );
                    
                }
                
            }
        }
        
        return sb.toString().trim();
        
    }
    
}

[]'s

sech777

Amigo, a classe String tem vários métodos que podem te ajudar.

Este método aqui, por exemplo:

String[] split(String regex)

Procura por uma expressão regular em uma String e retorna um array com a resultado encontrado.

Dá uma lida nesses links:

A classe String
http://download.oracle.com/javase/6/docs/api/java/lang/String.html

Expressões regulares:
http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum

adriano_si

Já era, exercício resolvido :roll:

Criado 1 de novembro de 2011
Ultima resposta 1 de nov. de 2011
Respostas 3
Participantes 4