Iniciais

Bom dia galera =)

Eu preciso fazer um programinha que mostre as iniciais do nome que a pessoa digite por exemplo:

"Digite um nome: Jorge Correia
Iniciais: JC "

Meu código:

import java.util.Scanner;
import java.io.PrintStream;

public class Exercicio0506 {
public static void main (String [] args) {
Scanner sc = new Scanner (System.in);
PrintStream ps = System.out;

	ps.print("Informe seu nome completo:\t");
	String nome = sc.nextLine();
	
	ps.print("Iniciais do seu nome:\t" + 
			nome.charAt(0) +
			[b]nome.substring(nome.lastIndexOf(" ") + nome.charAt(0)));[/b]
}

}

Se eu uso o length() o valor mostrado é JCorreia, pois o length() mostra a palavra inteira neh, pensei em usar o charAt() mais do jeito que eu estou colocando o programinha nao roda, a inicial do primeiro nome ta blz, o problema esta no segundo nome ;x

usa o nome.split(" ") para separar nome, sobrenome, 3o nome etc, e pega o 1º caracter de cada string separada

Mais como fica essa função no programa?
to começando agora no java, to bem nubao ainda
ahweihwaauiea ;x

[code]
private String iniciais(String nome) {

String[] array = nome.split(" "); // ou “\s+”

String iniciais = “”;
for (String s : array)
iniciais += s.charAt(0).toUpperCase();

return iniciais;
}[/code]
Quem sabe funciona :slight_smile:

Bruno, vlws cara =)
mais eu preciso de algo mais simples, com as funções da classe de strings e tals, sem laçoes de repetições,
é um exercicio que o professor passou pra gnt fazer e ainda nao começamos ver laços
iauwehaheiawuea :smiley:

alguem sabe um jeito de fazer sem usar laços de repetições?

Se me perguntasse como colocar zeros à direita ou à esquerda sem loop, eu saberia, mas este? Desculpe.

olha fiz usando um while, que é um loop simples, se não poder usar nem ele então quebra um poco mais a cabeça ai que vc consegue
ta ai:

Scanner sc = new Scanner (System.in);
			PrintStream ps = System.out;

			ps.print("Informe seu nome completo:\t");
			String nome = sc.nextLine();
			
			String nomeAbreviado = "";
			int contador = 0;
			
			nomeAbreviado += nome.charAt(0);
			
			contador++;
			
			while(contador < nome.length()){
				String letra = String.valueOf(nome.charAt(contador));
				if(letra.equals(" ")){
					nomeAbreviado += nome.charAt(contador+1);
				}
				contador++;
			}
			
			System.out.println("Iniciais do seu nome:\t" + nomeAbreviado);

Vlws xDD

mais eu preciso um sem laços msm, precisaria de uma maneira de usa-lo ali no substring, to tentando aqui mais ta complicado
auheuiawhehwaiuea

Gambiarra, mas:

String iniciais = nome.replaceAll("[^A-Z]+", "");

nao deu certo cara :S
eu tentei de tudo quanto é jeito aqui e nao consegui tb, 5ª eu tenho aula de Java
eu vejo com o professor xDD
vlwsssss brotherrr =)))

negocinho complicado cara ;xx
aiuewhueawiuea

[quote=JorjaoCorreia]nao deu certo cara :S
eu tentei de tudo quanto é jeito aqui e nao consegui tb, 5ª eu tenho aula de Java
eu vejo com o professor xDD
vlwsssss brotherrr =)))

negocinho complicado cara ;xx
aiuewhueawiuea[/quote]
? Não deu certo? Certeza?

public class Iniciais
{
    public static void main(String[] args)
    {
        String s = "Jorjao Correia".replaceAll("[^A-Z]+", "");
        System.out.println(s);
    }
}

Imprime JC certinho.

deu certo mais ali ta falando pra substituir as maisculas neh,
eu preciso que ele substitua as iniciais independente de ser maiuscula ou minuscula, do jeito que ficou ali se eu digitar um nome sem as primeiras letras maiusculas ele nao retorna nada, intendeu?
com o charAt() eu consigo pegar a primeira letra do nome mais a segunda ta foda ;((

Brigadao cara xD

Ufa… cada vez que eu ia postar que isso é impossível de fazer sem loops, vinha uma luz.

String s = nome.replaceAll("(\s*)([A-Za-z])([A-Za-z]*)(\s*)", "$2");

Por acaso o professor do digníssimo quer que o programa seja feito com recursão? Aí não vai haver loops.

Bruno, agora deu certinho brother xDDDD
mais vc pode me explicar o código? ;x
pra que servem esses itens (\s*) “$2” ?

thingol
é que nao começamos a usar laços, tambem nao vimos recursão ainda, o professor passou um exemplo com charAt() mais era só pra pegar a primeira inicial do nome, agora ele passou um exercicio para pegar as inicias do nome e sobrenome e nao tem exemplo nenhum uhaiehawiueuwaiea, mais agora com o que o Bruno passou deu certinho :slight_smile:
vou pedir pro professor como que é que ele queria que fosse feito, dai eu posto aqui no topico =))

Bem, essa String é uma Expressão Regular:

Grupos de expressões são separados por ( ). Neste caso tempos 4 grupos

\s*
[A-Za-z]
[A-Za-z]*
\s*

\s significa qualquer caracter de espaço em branco.

  • significa 0 ou mais desses caracteres em sequencia.
    [A-Za-z] significa qualquer caracter de A a Z e de a a z.

O primeiro grupo casa com 0 ou mais espaços antes do primeiro caracter da palavra
O segundo casa com a 1ª letra da palavra
O terceiro casa com o resto das letras da palavra.
O quarto são os espaços depois da palavra.

$2 serve para imprimir o conteúdo do segundo grupo naquele lugar.

Enfim, replaceAll pega todas as Strings dentro de uma String que casem com aquele padrão, e as troca por uma outra String. No caso casamos uma palavra, e a trocamos pela primeira letra da palavra.

Intendi
Brigadao cara =))

tive aula de java ontem e falei com o meu professor, era um negocio que chega ser besta de tao simples
iuaeHWheauwheauiea

nome.charAt() + nome.lastIndexOf(" ") + 1;

ai ele pega o primeiro caracter depois do espaço =))

vlwssss

[quote=JorjaoCorreia]tive aula de java ontem e falei com o meu professor, era um negocio que chega ser besta de tao simples
iuaeHWheauwheauiea

nome.charAt() + nome.lastIndexOf(" ") + 1;

ai ele pega o primeiro caracter depois do espaço =))

vlwssss
[/quote]

Dessa forma ele vai pegar somente a última inicial.