O que é discutido aqui é sobre o método next e o método nextLine na classe java scanner. O que são os métodos next() e nextLine()?
O problema ocorre:
Vejamos primeiro o seguinte código: Uma entrada e saída simples do console:
visualizar cópia simples para impressão da área de transferência?
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.nextLine();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
ni = cin.nextLine();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.nextLine();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
ni = cin.nextLine();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
Observe novamente o seguinte código:
visualizar cópia simples para impressão da área de transferência?
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.next();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
ni = cin.próximo();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.next();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
ni = cin.próximo();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
Os trechos de código acima são todos corretos e enfadonhos.
A coisa maravilhosa está chegando...
Execute o seguinte código:
visualizar cópia simples para impressão da área de transferência?
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.next();
System.out.println("Usar o método next() da classe Scanner para receber a string que você acabou de inserir é: "+ni+" e o comprimento é "+ni.length());
ni = cin.nextLine();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.next();
System.out.println("Usar o método next() da classe Scanner para receber a string que você acabou de inserir é: "+ni+" e o comprimento é "+ni.length());
ni = cin.nextLine();
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
Os resultados da execução são os seguintes:
lojista
Use o método next() da classe Scanner para receber a string que você acabou de inserir: ni lojista, o comprimento é 4
Use o método next() da classe Scanner para receber a string que você acabou de inserir: o comprimento é 0
Acabou, quando os métodos next e nextLine do Java Scanner são usados juntos,
Você não tem chance de inserir a segunda string! ! !
Análise do problema:
A aparente diferença entre o método next e o método nextLine é que o primeiro lê um "segmento" de caracteres, enquanto o último lê uma linha de strings.
Simplificando, a razão para o fenômeno acima é causada principalmente pela irresponsabilidade do método next().
Como funciona o método next(): (falando superficialmente)
Digitalize a partir de uma linha até encontrar um identificador específico: um espaço ou um caractere de nova linha (n) e obtenha o caractere (string) antes dele.
Veja aqui, o primeiro método next() lê "ni shopkeeper", mas não lê "n", nem é responsável por quebras de linha, e então lança "n" para nextLine() para processamento.
Como você sabe, nextLine() pertence ao tipo de "visão de dinheiro" que aceita "n" quando o vê e, em seguida, verifica o conteúdo antes de n, que é uma string vazia. Então algo deu errado.
Resolução de problemas:
visualizar cópia simples para impressão da área de transferência?
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.next();
System.out.println("Usar o método next() da classe Scanner para receber a string que você acabou de inserir é: "+ni+" e o comprimento é "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
pacote cn.nileader.app.vi;
importar java.util.Scanner;
teste de classe pública {
public static void main(String[] args) lança exceção{
Scanner cin = novo Scanner(System.in);
String ni = cin.next();
System.out.println("Usar o método next() da classe Scanner para receber a string que você acabou de inserir é: "+ni+" e o comprimento é "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Use o método next() da classe Scanner para receber a string que você acabou de inserir: "+ni+" e o comprimento é "+ni.length());
}
}
Resultados em execução:
lojista
Use o método next() da classe Scanner para receber a string que você acabou de inserir: ni lojista, o comprimento é 4
é um gênio
Use o método next() da classe Scanner para receber a string que você acabou de inserir: Ele é um gênio e o comprimento é 4
Coloque o segundo cin.nextLine() original
Mude para while( (ni = cin.nextLine()).equals("") ){}
Desta forma, a influência do “n” na linha anterior pode ser eliminada.