Como selecionar parte de uma string e imprimi-la?

22 respostas
G
Preciso que meu programa receba nomes inteiro e retorne so o 1°nome .
public static void main(String[] args) {


        Scanner entradanome = new Scanner(System.in);
        System.out.println("digite seu nome inteiro");
        String nomeint=entradanome.next();
         

         System.out.println(PRIMEIRO NOME)
}

Vlw pela ajuda []

22 Respostas

drsmachado
guhzantut:
Preciso que meu programa receba nomes inteiro e retorne so o 1°nome .
public static void main(String[] args) {


        Scanner entradanome = new Scanner(System.in);
        System.out.println("digite seu nome inteiro");
        String nomeint=entradanome.next();
         

         System.out.println(PRIMEIRO NOME)
}

Vlw pela ajuda []


Procure no google por "javadoc String" e você poderá pesquisar diretamente na documentação da classe java.lang.String quais métodos podem te auxiliar.

igor_ks

Use split da classe String + regex

String nomeCompleto = "Joao da Silva";
		String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
		System.out.println(nomeSeparado[0]);

Entenda o que este código faz, sem simplesmente copiar e colar

G

igor_ks:
Use split da classe String + regex

String nomeCompleto = "Joao da Silva";
		String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
		System.out.println(nomeSeparado[0]);

Entenda o que este código faz, sem simplesmente copiar e colar


eu tava com um codigo parecido mas em vez de “\s” tava " " , e nao funcionava , nao sabia desse [0]

igor_ks

String[] é uma array de Strings, ou seja, contem varias Strings
e o metodo split retorna um String[], peguei o [0] pq queria o primeiro nome, mas String[1] e String[2] tambem retornariam valores nesse exemplo e String[3] daria um ArrayIndexOutOfBoundsException

G

igor_ks:
String[] é uma array de Strings, ou seja, contem varias Strings
e o metodo split retorna um String[], peguei o [0] pq queria o primeiro nome, mas String[1] e String[2] tambem retornariam valores nesse exemplo e String[3] daria um ArrayIndexOutOfBoundsException

esta dando esse erro mesmo com String[1] e [2] .

JavaDreams
guhzantut:
igor_ks:
Use split da classe String + regex
String nomeCompleto = "Joao da Silva";
		String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
		System.out.println(nomeSeparado[0]);

Entenda o que este código faz, sem simplesmente copiar e colar


eu tava com um codigo parecido mas em vez de "\\s" tava " " , e nao funcionava , nao sabia desse [0]

Olá guhzantut, seja bem vindo.

Olha eu fiz o teste com o código do igor_ks e deu certo aqui olha

public class SeparaString {
    
    public static void main(String[] args){
            String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);  
    }
    
}

Saída

run:
Joao
da
Silva
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Tipo tenta testar aí para ver o que está ocorrendo
se não conseguir então tente debugar
mas se não for mesmo assim então pede ajuda que a gente apoia.

Rodrigo_Sasaki

Eu particularmente iria fazer isso com um substring :slight_smile: Que talvez seja o que o drsmachado tinha em mente, não sei.

Agora se for usar expressões regulares, por que não fazer logo uma que retorna só o primeiro nome? :slight_smile:

JavaDreams

Rodrigo Sasaki:
Eu particularmente iria fazer isso com um substring :slight_smile: Que talvez seja o que o drsmachado tinha em mente, não sei.

Agora se for usar expressões regulares, por que não fazer logo uma que retorna só o primeiro nome? :)

Eu ainda não testei o substring pois não utilizo,
mas se der para usar com ele então posta para nós
por favor.
No caso de ser expressões regulares eu mostrei todas as 3 porque o guhzantut
relatou que estava dando um erro, por isso testei demonstrando para os 3.

Mas como você disse no caso é para usar só o primeiro mesmo e retornar o valor do índice 0 hehehe

abraço.

Rodrigo_Sasaki

O mais simples seria:String nomeCompleto = "Rodrigo Sasaki"; String primeiroNome = nomeCompleto.substring(0, nomeCompleto.indexOf(' ') + 1);Acho que é isso, não testei aqui.

Mas talvez um split realmente seja mais fácil de entender :slight_smile:

G
JavaDreams:
guhzantut:
igor_ks:
Use split da classe String + regex
String nomeCompleto = "Joao da Silva";
		String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
		System.out.println(nomeSeparado[0]);

Entenda o que este código faz, sem simplesmente copiar e colar


eu tava com um codigo parecido mas em vez de "\\s" tava " " , e nao funcionava , nao sabia desse [0]

Olá guhzantut, seja bem vindo.

Olha eu fiz o teste com o código do igor_ks e deu certo aqui olha

public class SeparaString {
    
    public static void main(String[] args){
            String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);  
    }
    
}

Saída

run:
Joao
da
Silva
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Tipo tenta testar aí para ver o que está ocorrendo
se não conseguir então tente debugar
mas se não for mesmo assim então pede ajuda que a gente apoia.

nao foi mesmo

public static void main(String[] args) {
        // TODO code application logic here
      
        
   Scanner entradanome = new Scanner(System.in);
        System.out.println("digite seu nome inteiro");
        String nomeint=entradanome.next();
      
     String [] nome = nomeint.split("\\s");
        
     System.out.println(nome[0]);
        System.out.println(nome[1]);
        
                }
ai o string[0] aparece , mas o string[1] da erro :Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at provas.Provas.main(Provas.java:33) Java Result: 1.
G
Rodrigo Sasaki:
O mais simples seria:
String nomeCompleto = "Rodrigo Sasaki";
String primeiroNome = nomeCompleto.substring(0, nomeCompleto.indexOf(' ') + 1);
Acho que é isso, não testei aqui.

Mas talvez um split realmente seja mais fácil de entender :)


nao rolou , ele nao imprimiu nada

public static void main(String[] args) {
        // TODO code application logic here
      
        
   Scanner entradanome = new Scanner(System.in);
        System.out.println("digite seu nome inteiro");
        String nomeint=entradanome.next();
      
String nome = nomeint.substring(0, nomeint.indexOf(' ') + 1);  
        
     System.out.println(nome);
       
        
                }
JavaDreams
guhzantut:
JavaDreams:
guhzantut:
igor_ks:
Use split da classe String + regex
String nomeCompleto = "Joao da Silva";
		String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
		System.out.println(nomeSeparado[0]);

Entenda o que este código faz, sem simplesmente copiar e colar


eu tava com um codigo parecido mas em vez de "\\s" tava " " , e nao funcionava , nao sabia desse [0]

Olá guhzantut, seja bem vindo.

Olha eu fiz o teste com o código do igor_ks e deu certo aqui olha

public class SeparaString {
    
    public static void main(String[] args){
            String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);  
    }
    
}

Saída

run:
Joao
da
Silva
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Tipo tenta testar aí para ver o que está ocorrendo
se não conseguir então tente debugar
mas se não for mesmo assim então pede ajuda que a gente apoia.

nao foi mesmo

public static void main(String[] args) {
        // TODO code application logic here
      
        
   Scanner entradanome = new Scanner(System.in);
        System.out.println("digite seu nome inteiro");
        String nomeint=entradanome.next();
      
     String [] nome = nomeint.split("\\s");
        
     System.out.println(nome[0]);
        System.out.println(nome[1]);
        
                }
ai o string[0] aparece , mas o string[1] da erro :Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at provas.Provas.main(Provas.java:33) Java Result: 1.

Amigo tem certeza que fez do jeito certo?

Ele tá dando um erro na classe Provas?

Meu faz o seguinte:
Cria uma nova classe com o nome SeparaString

Cria o main dela normalmente e dentro dela você coloca o código abaixo:

String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);

Depois você executa esse código
mas cuidado pois acho que está executando um outro projeto antigo seu.

Se estiver no eclipse vc clica com o botão direito do mouse no meio do código e escolhe Run As / Java Aplication

Se estiver no NetBeans você clica com o botão direito do mouse no seu projeto e escolhe
executar arquivo.

Mas tenho quase certeza que seu java está rodando outra classe que ficou setada no projeto ou jvm sei lá.

Olha aí e se não conseguir fala aí que faço um vídeo e posto no youtube para te ajudar.

abraço

G
JavaDreams:
guhzantut:
JavaDreams:
guhzantut:
igor_ks:
Use split da classe String + regex
String nomeCompleto = "Joao da Silva";
		String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
		System.out.println(nomeSeparado[0]);

Entenda o que este código faz, sem simplesmente copiar e colar


eu tava com um codigo parecido mas em vez de "\\s" tava " " , e nao funcionava , nao sabia desse [0]

Olá guhzantut, seja bem vindo.

Olha eu fiz o teste com o código do igor_ks e deu certo aqui olha

public class SeparaString {
    
    public static void main(String[] args){
            String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);  
    }
    
}

Saída

run:
Joao
da
Silva
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Tipo tenta testar aí para ver o que está ocorrendo
se não conseguir então tente debugar
mas se não for mesmo assim então pede ajuda que a gente apoia.

nao foi mesmo

public static void main(String[] args) {
        // TODO code application logic here
      
        
   Scanner entradanome = new Scanner(System.in);
        System.out.println("digite seu nome inteiro");
        String nomeint=entradanome.next();
      
     String [] nome = nomeint.split("\\s");
        
     System.out.println(nome[0]);
        System.out.println(nome[1]);
        
                }
ai o string[0] aparece , mas o string[1] da erro :Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at provas.Provas.main(Provas.java:33) Java Result: 1.

Amigo tem certeza que fez do jeito certo?

Ele tá dando um erro na classe Provas?

Meu faz o seguinte:
Cria uma nova classe com o nome SeparaString

Cria o main dela normalmente e dentro dela você coloca o código abaixo:

String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);

Depois você executa esse código
mas cuidado pois acho que está executando um outro projeto antigo seu.

Se estiver no eclipse vc clica com o botão direito do mouse no meio do código e escolhe Run As / Java Aplication

Se estiver no NetBeans você clica com o botão direito do mouse no seu projeto e escolhe
executar arquivo.

Mas tenho quase certeza que seu java está rodando outra classe que ficou setada no projeto ou jvm sei lá.

Olha aí e se não conseguir fala aí que faço um vídeo e posto no youtube para te ajudar.

abraço


estou rodando ele como um metodo dentro de uma classe mesmo , mas pra tira a duvida criei um novo projeto ...o codigo do "joao da silva" funcionou mas quando mudei o nome pra uma entrada deu o mesmo erro

public static void main(String[] args) {
        Scanner entrada=new Scanner(System.in);
        String nomeCompleto = entrada.next();    
String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco    
System.out.println(nomeSeparado[0]);  
System.out.println(nomeSeparado[1]);  
System.out.println(nomeSeparado[2]);    
        // TODO code application logic here
    }

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at separastring.SeparaString.main(SeparaString.java:23)
Java Result: 1.

EDIT: provavelmente preciso por algo alem do "next()", porque eu mandei ele printar o que ele le e so sai o primeiro nome
EDIT2: consegui , troquei next por nextLine.

igor_ks

Cara… entende oq te expliquei… por favor…

para a String “Joao da Silva”, e split vai retornar um array com 3 Strings, porque ele vai ver os espacos em branco e iniciar uma outra String, ou seja, string[4] vai dar erro porque não existe nada na posicao 4 da String…

Teste de mesa:
String[] nomeCompleto = “Joao da Silva”.split("\s");

na memória, o array de Strings vai ficar assim
[Joao] [da] [Silva] [vazio até o infinito]
—0-----1------2------ ArrayIndexOutOfBounds ate o infinito

se vc tentar acessar o 3, ou o 999, vai dar esse erro, entendeu?
Por isso no seu programa, se vc digitar apenas “Joao”, no digite seu nome, qdo tentar acessar o nome[1], vai dar indexOutOfBoundsException

JavaDreams
guhzantut:
JavaDreams:
guhzantut:
JavaDreams:
guhzantut:
igor_ks:
Use split da classe String + regex
String nomeCompleto = "Joao da Silva";
		String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
		System.out.println(nomeSeparado[0]);

Entenda o que este código faz, sem simplesmente copiar e colar


eu tava com um codigo parecido mas em vez de "\\s" tava " " , e nao funcionava , nao sabia desse [0]

Olá guhzantut, seja bem vindo.

Olha eu fiz o teste com o código do igor_ks e deu certo aqui olha

public class SeparaString {
    
    public static void main(String[] args){
            String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);  
    }
    
}

Saída

run:
Joao
da
Silva
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Tipo tenta testar aí para ver o que está ocorrendo
se não conseguir então tente debugar
mas se não for mesmo assim então pede ajuda que a gente apoia.

nao foi mesmo

public static void main(String[] args) {
        // TODO code application logic here
      
        
   Scanner entradanome = new Scanner(System.in);
        System.out.println("digite seu nome inteiro");
        String nomeint=entradanome.next();
      
     String [] nome = nomeint.split("\\s");
        
     System.out.println(nome[0]);
        System.out.println(nome[1]);
        
                }
ai o string[0] aparece , mas o string[1] da erro :Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at provas.Provas.main(Provas.java:33) Java Result: 1.

Amigo tem certeza que fez do jeito certo?

Ele tá dando um erro na classe Provas?

Meu faz o seguinte:
Cria uma nova classe com o nome SeparaString

Cria o main dela normalmente e dentro dela você coloca o código abaixo:

String nomeCompleto = "Joao da Silva";  
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco  
            System.out.println(nomeSeparado[0]);
            System.out.println(nomeSeparado[1]);
            System.out.println(nomeSeparado[2]);

Depois você executa esse código
mas cuidado pois acho que está executando um outro projeto antigo seu.

Se estiver no eclipse vc clica com o botão direito do mouse no meio do código e escolhe Run As / Java Aplication

Se estiver no NetBeans você clica com o botão direito do mouse no seu projeto e escolhe
executar arquivo.

Mas tenho quase certeza que seu java está rodando outra classe que ficou setada no projeto ou jvm sei lá.

Olha aí e se não conseguir fala aí que faço um vídeo e posto no youtube para te ajudar.

abraço


estou rodando ele como um metodo dentro de uma classe mesmo , mas pra tira a duvida criei um novo projeto ...o codigo do "joao da silva" funcionou mas quando mudei o nome pra uma entrada deu o mesmo erro

public static void main(String[] args) {
        Scanner entrada=new Scanner(System.in);
        String nomeCompleto = entrada.next();    
String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco    
System.out.println(nomeSeparado[0]);  
System.out.println(nomeSeparado[1]);  
System.out.println(nomeSeparado[2]);    
        // TODO code application logic here
    }

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at separastring.SeparaString.main(SeparaString.java:23)
Java Result: 1.

EDIT: provavelmente preciso por algo alem do "next()", porque eu mandei ele printar o que ele le e so sai o primeiro nome
EDIT2: consegui , troquei next por nextLine.

Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()

O correto seria:
public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            System.out.println(nomeSeparado[0]);    
            System.out.println(nomeSeparado[1]);    
            System.out.println(nomeSeparado[2]);      
            // TODO code application logic here  
        }
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();

Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer

Faça o código da seguinte maneira:

public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            
            for(int cont=0; cont < nomeSeparado.length; cont++){
                System.out.println(nomeSeparado[cont]); 
            }
        }

Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.

Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.

Se tiver dúvida pode perguntar.

Abraço.

G

igor_ks:
Cara… entende oq te expliquei… por favor…

para a String “Joao da Silva”, e split vai retornar um array com 3 Strings, porque ele vai ver os espacos em branco e iniciar uma outra String, ou seja, string[4] vai dar erro porque não existe nada na posicao 4 da String…

Teste de mesa:
String[] nomeCompleto = “Joao da Silva”.split("\s");

na memória, o array de Strings vai ficar assim
[Joao] [da] [Silva] [vazio até o infinito]
—0-----1------2------ ArrayIndexOutOfBounds ate o infinito

se vc tentar acessar o 3, ou o 999, vai dar esse erro, entendeu?
Por isso no seu programa, se vc digitar apenas “Joao”, no digite seu nome, qdo tentar acessar o nome[1], vai dar indexOutOfBoundsException


eu entendi isso perfeitamente

G
JavaDreams:

Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()

O correto seria:
public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            System.out.println(nomeSeparado[0]);    
            System.out.println(nomeSeparado[1]);    
            System.out.println(nomeSeparado[2]);      
            // TODO code application logic here  
        }
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();

Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer

Faça o código da seguinte maneira:

public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            
            for(int cont=0; cont < nomeSeparado.length; cont++){
                System.out.println(nomeSeparado[cont]); 
            }
        }

Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.

Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.

Se tiver dúvida pode perguntar.

Abraço.


eu precisaria collocar esse 10? nao estaria limitando o numero de sobrenomes?

JavaDreams
guhzantut:
JavaDreams:

Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()

O correto seria:
public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            System.out.println(nomeSeparado[0]);    
            System.out.println(nomeSeparado[1]);    
            System.out.println(nomeSeparado[2]);      
            // TODO code application logic here  
        }
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();

Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer

Faça o código da seguinte maneira:

public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            
            for(int cont=0; cont < nomeSeparado.length; cont++){
                System.out.println(nomeSeparado[cont]); 
            }
        }

Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.

Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.

Se tiver dúvida pode perguntar.

Abraço.


eu precisaria collocar esse 10? nao estaria limitando o numero de sobrenomes?

Até onde eu sei fica assim:

Se você for mecher com o tipo Vetor sim.
Se você for mecher com o tipo Estrutura não.

vetor:
String[] nomeSeparado = new String[10];

Estrutura ArrayList:
ArrayList lista = new ArrayLista();

A diferença está no fato de que o tipo Vetor não tem um método
que o permita aumentar de tamanho quando for necessário, ou seja,
quando seus itens estiverem todos preenchidos.

Já o ArrayList tem em sua própria estrutura ferramentas/métodos
que lhe permitem aumentar de tamanho quando necessário.
Inclusive por isso que quando queremos adicionar um elemento no ArrayList
basta fazermos.

lista.add(elemento);

até onde eu sei, dentro da estrutura do ArrayList ele tem uma ferramenta
que vai mapeando o que for necessário para sempre ele ter espaço.

Mas aí entra em um assunto que é complexo e que não vem ao caso
pois acredito que nem eu nem você vamos ser engenheiros de software
e por isso não aprofundo tanto em saber ou explicar o funcionamento interno
do ArrayList ou saber como as coisas acontecem dentro dele.

Para guardar fácil é o seguinte:

Vetor => você sempre tem que passar o tamanho dele na declaração, senão
não vai conseguir usar. Sempre tem que dizer a posição de index que quer
pegar ou alterar na hora que for fazer algo.

ArrayList => Não precisa se preocupar em dizer o seu tamanho quando o for criar
e nem quando for adicionar um novo elemento, se preocupar se vai caber ou não,
pois ele internamente já possui métodos/ferramentas que aumentam o espaço
alocado em memória de acordo com a necessidade para que não dê nullpoint
quando o seu programa estiver rodando.

Lembrando que uma vez eu vi um cara que fez um vetor que aumentava o seu tamanho
manipulando ponteiros de memória e outras coisas mais. Mas na minha opinião essa prática
não é recomendada em Java por questões de segurança e de OO.

Não usei termos muito técnicos e nem aprofundei muito nisso ou naquilo pois só iria
ficar mais complexo...

A melhor dica que te dou é para ler o livro Java Use a Cabeça, pois ele exemplifica muito
bem o que é cada coisa e mostra com muitos desenhos as coisas acontecendo.

Se eu me lembro bem isso está no capítulo 3 do livro mais ou menos.

Abraço.

G
JavaDreams:
guhzantut:
JavaDreams:

Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()

O correto seria:
public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            System.out.println(nomeSeparado[0]);    
            System.out.println(nomeSeparado[1]);    
            System.out.println(nomeSeparado[2]);      
            // TODO code application logic here  
        }
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();

Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer

Faça o código da seguinte maneira:

public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            
            for(int cont=0; cont < nomeSeparado.length; cont++){
                System.out.println(nomeSeparado[cont]); 
            }
        }

Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.

Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.

Se tiver dúvida pode perguntar.

Abraço.


eu precisaria collocar esse 10? nao estaria limitando o numero de sobrenomes?

Até onde eu sei fica assim:

Se você for mecher com o tipo Vetor sim.
Se você for mecher com o tipo Estrutura não.

vetor:
String[] nomeSeparado = new String[10];

Estrutura ArrayList:
ArrayList lista = new ArrayLista();

A diferença está no fato de que o tipo Vetor não tem um método
que o permita aumentar de tamanho quando for necessário, ou seja,
quando seus itens estiverem todos preenchidos.

Já o ArrayList tem em sua própria estrutura ferramentas/métodos
que lhe permitem aumentar de tamanho quando necessário.
Inclusive por isso que quando queremos adicionar um elemento no ArrayList
basta fazermos.

lista.add(elemento);

até onde eu sei, dentro da estrutura do ArrayList ele tem uma ferramenta
que vai mapeando o que for necessário para sempre ele ter espaço.

Mas aí entra em um assunto que é complexo e que não vem ao caso
pois acredito que nem eu nem você vamos ser engenheiros de software
e por isso não aprofundo tanto em saber ou explicar o funcionamento interno
do ArrayList ou saber como as coisas acontecem dentro dele.

Para guardar fácil é o seguinte:

Vetor => você sempre tem que passar o tamanho dele na declaração, senão
não vai conseguir usar. Sempre tem que dizer a posição de index que quer
pegar ou alterar na hora que for fazer algo.

ArrayList => Não precisa se preocupar em dizer o seu tamanho quando o for criar
e nem quando for adicionar um novo elemento, se preocupar se vai caber ou não,
pois ele internamente já possui métodos/ferramentas que aumentam o espaço
alocado em memória de acordo com a necessidade para que não dê nullpoint
quando o seu programa estiver rodando.

Lembrando que uma vez eu vi um cara que fez um vetor que aumentava o seu tamanho
manipulando ponteiros de memória e outras coisas mais. Mas na minha opinião essa prática
não é recomendada em Java por questões de segurança e de OO.

Não usei termos muito técnicos e nem aprofundei muito nisso ou naquilo pois só iria
ficar mais complexo...

A melhor dica que te dou é para ler o livro Java Use a Cabeça, pois ele exemplifica muito
bem o que é cada coisa e mostra com muitos desenhos as coisas acontecendo.

Se eu me lembro bem isso está no capítulo 3 do livro mais ou menos.

Abraço.


agora entendi...
muito obg pela ajuda , estou lendo , comecei ontem.

JavaDreams
guhzantut:
JavaDreams:
guhzantut:
JavaDreams:

Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()

O correto seria:
public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            System.out.println(nomeSeparado[0]);    
            System.out.println(nomeSeparado[1]);    
            System.out.println(nomeSeparado[2]);      
            // TODO code application logic here  
        }
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();

Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer

Faça o código da seguinte maneira:

public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            
            for(int cont=0; cont < nomeSeparado.length; cont++){
                System.out.println(nomeSeparado[cont]); 
            }
        }

Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.

Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.

Se tiver dúvida pode perguntar.

Abraço.


eu precisaria collocar esse 10? nao estaria limitando o numero de sobrenomes?

Até onde eu sei fica assim:

Se você for mecher com o tipo Vetor sim.
Se você for mecher com o tipo Estrutura não.

vetor:
String[] nomeSeparado = new String[10];

Estrutura ArrayList:
ArrayList lista = new ArrayLista();

A diferença está no fato de que o tipo Vetor não tem um método
que o permita aumentar de tamanho quando for necessário, ou seja,
quando seus itens estiverem todos preenchidos.

Já o ArrayList tem em sua própria estrutura ferramentas/métodos
que lhe permitem aumentar de tamanho quando necessário.
Inclusive por isso que quando queremos adicionar um elemento no ArrayList
basta fazermos.

lista.add(elemento);

até onde eu sei, dentro da estrutura do ArrayList ele tem uma ferramenta
que vai mapeando o que for necessário para sempre ele ter espaço.

Mas aí entra em um assunto que é complexo e que não vem ao caso
pois acredito que nem eu nem você vamos ser engenheiros de software
e por isso não aprofundo tanto em saber ou explicar o funcionamento interno
do ArrayList ou saber como as coisas acontecem dentro dele.

Para guardar fácil é o seguinte:

Vetor => você sempre tem que passar o tamanho dele na declaração, senão
não vai conseguir usar. Sempre tem que dizer a posição de index que quer
pegar ou alterar na hora que for fazer algo.

ArrayList => Não precisa se preocupar em dizer o seu tamanho quando o for criar
e nem quando for adicionar um novo elemento, se preocupar se vai caber ou não,
pois ele internamente já possui métodos/ferramentas que aumentam o espaço
alocado em memória de acordo com a necessidade para que não dê nullpoint
quando o seu programa estiver rodando.

Lembrando que uma vez eu vi um cara que fez um vetor que aumentava o seu tamanho
manipulando ponteiros de memória e outras coisas mais. Mas na minha opinião essa prática
não é recomendada em Java por questões de segurança e de OO.

Não usei termos muito técnicos e nem aprofundei muito nisso ou naquilo pois só iria
ficar mais complexo...

A melhor dica que te dou é para ler o livro Java Use a Cabeça, pois ele exemplifica muito
bem o que é cada coisa e mostra com muitos desenhos as coisas acontecendo.

Se eu me lembro bem isso está no capítulo 3 do livro mais ou menos.

Abraço.


agora entendi...
muito obg pela ajuda , estou lendo , comecei ontem.

Fique à vontade para perguntar sempre que precisar.
Até a próxima e obrigado por estar conosco.

Abraço.

drsmachado
JavaDreams:
guhzantut:
JavaDreams:

Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()

O correto seria:
public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            System.out.println(nomeSeparado[0]);    
            System.out.println(nomeSeparado[1]);    
            System.out.println(nomeSeparado[2]);      
            // TODO code application logic here  
        }
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();

Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer

Faça o código da seguinte maneira:

public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            
            for(int cont=0; cont < nomeSeparado.length; cont++){
                System.out.println(nomeSeparado[cont]); 
            }
        }

Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.

Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.

Se tiver dúvida pode perguntar.

Abraço.


eu precisaria collocar esse 10? nao estaria limitando o numero de sobrenomes?

Até onde eu sei fica assim:

Se você for mecher com o tipo Vetor sim.
Se você for mecher com o tipo Estrutura não.

vetor:
String[] nomeSeparado = new String[10];

Estrutura ArrayList:
ArrayList lista = new ArrayLista();

A diferença está no fato de que o tipo Vetor não tem um método
que o permita aumentar de tamanho quando for necessário, ou seja,
quando seus itens estiverem todos preenchidos.

Já o ArrayList tem em sua própria estrutura ferramentas/métodos
que lhe permitem aumentar de tamanho quando necessário.
Inclusive por isso que quando queremos adicionar um elemento no ArrayList
basta fazermos.

lista.add(elemento);

até onde eu sei, dentro da estrutura do ArrayList ele tem uma ferramenta
que vai mapeando o que for necessário para sempre ele ter espaço.

Mas aí entra em um assunto que é complexo e que não vem ao caso
pois acredito que nem eu nem você vamos ser engenheiros de software
e por isso não aprofundo tanto em saber ou explicar o funcionamento interno
do ArrayList ou saber como as coisas acontecem dentro dele.

Para guardar fácil é o seguinte:

Vetor => você sempre tem que passar o tamanho dele na declaração, senão
não vai conseguir usar. Sempre tem que dizer a posição de index que quer
pegar ou alterar na hora que for fazer algo.

ArrayList => Não precisa se preocupar em dizer o seu tamanho quando o for criar
e nem quando for adicionar um novo elemento, se preocupar se vai caber ou não,
pois ele internamente já possui métodos/ferramentas que aumentam o espaço
alocado em memória de acordo com a necessidade para que não dê nullpoint
quando o seu programa estiver rodando.

Lembrando que uma vez eu vi um cara que fez um vetor que aumentava o seu tamanho
manipulando ponteiros de memória e outras coisas mais. Mas na minha opinião essa prática
não é recomendada em Java por questões de segurança e de OO.

Não usei termos muito técnicos e nem aprofundei muito nisso ou naquilo pois só iria
ficar mais complexo...

A melhor dica que te dou é para ler o livro Java Use a Cabeça, pois ele exemplifica muito
bem o que é cada coisa e mostra com muitos desenhos as coisas acontecendo.

Se eu me lembro bem isso está no capítulo 3 do livro mais ou menos.

Abraço.
A instanciação de uma instância de objeto vetor (todo vetor em java é um Objeto) pode ser feita assim
String vetor[] = new String[10];
Ou assim
String vetor[] = new String[]{"ABC", "CDS", "DDD"};
Ou, quando temos um método cujo retorno é um array do tipo esperado, como o método split, da classe java.lang.String
String[] vetor = valorRecebido.split(" ");
Logo, dependendo de como você for desenvolver é que vai verificar a necessidade. Porém, se optar por usar o split realmente, evite isto
String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
Como você não sabe quantas palavras formam o nome da pessoa, é uma má prática definir o tamanho do array. Prefira isso
String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
Bem mais simples e direto.

P.S.: Para não fugir do estigma de chato e inconveniente, lembro que não existe a palavra "mecher", ela é resultado de um erro crasso ao tentar referir a palavra mexer.
Dúvidas? Veja

JavaDreams
drsmachado:
JavaDreams:
guhzantut:
JavaDreams:

Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()

O correto seria:
public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            System.out.println(nomeSeparado[0]);    
            System.out.println(nomeSeparado[1]);    
            System.out.println(nomeSeparado[2]);      
            // TODO code application logic here  
        }
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();

Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer

Faça o código da seguinte maneira:

public static void main(String[] args) {  
            Scanner entrada=new Scanner(System.in);  
            String nomeCompleto = entrada.nextLine();      
            String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco      
            
            for(int cont=0; cont < nomeSeparado.length; cont++){
                System.out.println(nomeSeparado[cont]); 
            }
        }

Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.

Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.

Se tiver dúvida pode perguntar.

Abraço.


eu precisaria collocar esse 10? nao estaria limitando o numero de sobrenomes?

Até onde eu sei fica assim:

Se você for mecher com o tipo Vetor sim.
Se você for mecher com o tipo Estrutura não.

vetor:
String[] nomeSeparado = new String[10];

Estrutura ArrayList:
ArrayList lista = new ArrayLista();

A diferença está no fato de que o tipo Vetor não tem um método
que o permita aumentar de tamanho quando for necessário, ou seja,
quando seus itens estiverem todos preenchidos.

Já o ArrayList tem em sua própria estrutura ferramentas/métodos
que lhe permitem aumentar de tamanho quando necessário.
Inclusive por isso que quando queremos adicionar um elemento no ArrayList
basta fazermos.

lista.add(elemento);

até onde eu sei, dentro da estrutura do ArrayList ele tem uma ferramenta
que vai mapeando o que for necessário para sempre ele ter espaço.

Mas aí entra em um assunto que é complexo e que não vem ao caso
pois acredito que nem eu nem você vamos ser engenheiros de software
e por isso não aprofundo tanto em saber ou explicar o funcionamento interno
do ArrayList ou saber como as coisas acontecem dentro dele.

Para guardar fácil é o seguinte:

Vetor => você sempre tem que passar o tamanho dele na declaração, senão
não vai conseguir usar. Sempre tem que dizer a posição de index que quer
pegar ou alterar na hora que for fazer algo.

ArrayList => Não precisa se preocupar em dizer o seu tamanho quando o for criar
e nem quando for adicionar um novo elemento, se preocupar se vai caber ou não,
pois ele internamente já possui métodos/ferramentas que aumentam o espaço
alocado em memória de acordo com a necessidade para que não dê nullpoint
quando o seu programa estiver rodando.

Lembrando que uma vez eu vi um cara que fez um vetor que aumentava o seu tamanho
manipulando ponteiros de memória e outras coisas mais. Mas na minha opinião essa prática
não é recomendada em Java por questões de segurança e de OO.

Não usei termos muito técnicos e nem aprofundei muito nisso ou naquilo pois só iria
ficar mais complexo...

A melhor dica que te dou é para ler o livro Java Use a Cabeça, pois ele exemplifica muito
bem o que é cada coisa e mostra com muitos desenhos as coisas acontecendo.

Se eu me lembro bem isso está no capítulo 3 do livro mais ou menos.

Abraço.
A instanciação de uma instância de objeto vetor (todo vetor em java é um Objeto) pode ser feita assim
String vetor[] = new String[10];
Ou assim
String vetor[] = new String[]{"ABC", "CDS", "DDD"};
Ou, quando temos um método cujo retorno é um array do tipo esperado, como o método split, da classe java.lang.String
String[] vetor = valorRecebido.split(" ");
Logo, dependendo de como você for desenvolver é que vai verificar a necessidade. Porém, se optar por usar o split realmente, evite isto
String[] nomeSeparado = new String[10];
            nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
Como você não sabe quantas palavras formam o nome da pessoa, é uma má prática definir o tamanho do array. Prefira isso
String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
Bem mais simples e direto.

P.S.: Para não fugir do estigma de chato e inconveniente, lembro que não existe a palavra "mecher", ela é resultado de um erro crasso ao tentar referir a palavra mexer.
Dúvidas? Veja

Quando vou fazer essas coisas prefiro usar ArrayList ou outras estruturas,
mas como o dono do post queria era saber como resolver o problema
tentamos todos ajudar ele.

Como seu intuito é sempre não fugir do estigma..... "como vc mesmo disse"
e agora ficar corrigindo e expondo a gente só por conta de erro de português...
continuarei a ignorá-lo como todos já fazem no fórum, quem sabe um dia canse
de ser assim.
E também não tem motivos para argumentar contigo pois o dono do post já disse
que entendeu. E por isso já dou-me por satisfeito.

Mas mesmo assim acho melhor eu não """MECHER""" mais neste post.
Precisando estamos aí. Vou ali Mecher em outros códigos.

abração amigos

Criado 19 de agosto de 2013
Ultima resposta 20 de ago. de 2013
Respostas 22
Participantes 5