여기서 논의되는 것은 자바 스캐너 클래스의 next 메소드와 nextLine 메소드에 관한 것이다. next() 및 nextLine() 메소드란 무엇입니까?
문제가 발생합니다:
먼저 다음 코드를 살펴보겠습니다. 간단한 콘솔 입력 및 출력:
일반 사본을 클립보드 인쇄로 보시겠습니까?
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.nextLine();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
ni = cin.nextLine();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.nextLine();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
ni = cin.nextLine();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
다음 코드를 다시 살펴보세요.
일반 사본을 클립보드 인쇄로 보시겠습니까?
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.next();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
ni = cin.next();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.next();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
ni = cin.next();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
위의 코드 조각은 모두 정확하고 지루합니다.
놀라운 일이 다가오고 있습니다 ...
다음 코드를 실행하세요.
일반 사본을 클립보드 인쇄로 보시겠습니까?
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.next();
System.out.println("방금 입력한 문자열을 수신하기 위해 Scanner 클래스의 next() 메소드를 사용하는 것은 "+ni+"이고 길이는 "+ni.length());
ni = cin.nextLine();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.next();
System.out.println("방금 입력한 문자열을 수신하기 위해 Scanner 클래스의 next() 메소드를 사용하는 것은 "+ni+"이고 길이는 "+ni.length());
ni = cin.nextLine();
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
실행 결과는 다음과 같습니다.
가게 주인
방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메소드를 사용하십시오. ni shopkeeper, 길이는 4입니다.
방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하세요. 길이는 0입니다.
Java Scanner의 next와 nextLine 메소드를 함께 사용하면 끝입니다.
두 번째 문자열을 입력할 기회가 없습니다! ! !
문제 분석:
next 메서드와 nextLine 메서드의 명백한 차이점은 전자는 문자의 "세그먼트"를 읽는 반면, 후자는 문자열 한 줄을 읽는다는 것입니다.
간단히 말해서, 위와 같은 현상이 발생하는 원인은 주로 next() 메소드의 무책임함에서 비롯됩니다.
next() 메소드 작동 방식: (피상적으로 말하자면)
특정 식별자(공백 또는 개행 문자(n))가 나타날 때까지 줄에서 스캔하고 그 앞에 있는 문자(문자열)를 가져옵니다.
여기를 보세요. 첫 번째 next() 메서드는 "ni shopkeeper"를 읽지만 "n"을 읽지 않으며 줄 바꿈도 담당하지 않으며 처리를 위해 "n"을 nextLine()에 보냅니다.
아시다시피 nextLine()은 "n"을 볼 때 이를 허용하고 빈 문자열인 n 이전의 내용을 검색하는 일종의 "돈 보기" 유형에 속합니다. 그런 다음 문제가 발생했습니다.
문제 해결:
일반 사본을 클립보드 인쇄로 보시겠습니까?
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.next();
System.out.println("방금 입력한 문자열을 수신하기 위해 Scanner 클래스의 next() 메소드를 사용하는 것은 "+ni+"이고 길이는 "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
패키지 cn.nileader.app.vi;
java.util.Scanner 가져오기;
공개 클래스 테스트 {
public static void main(String[] args)에서 예외 발생{
Scanner cin = new Scanner(System.in);
문자열 ni = cin.next();
System.out.println("방금 입력한 문자열을 수신하기 위해 Scanner 클래스의 next() 메소드를 사용하는 것은 "+ni+"이고 길이는 "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오: "+ni+", 길이는 "+ni.length());
}
}
실행 결과:
가게 주인
방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메소드를 사용하십시오. ni shopkeeper, 길이는 4입니다.
천재다
방금 입력한 문자열을 받으려면 Scanner 클래스의 next() 메서드를 사용하십시오. 그는 천재이고 길이는 4입니다.
원래 두 번째 cin.nextLine()을 넣으세요.
while( (ni = cin.nextLine()).equals("") ){}로 변경합니다.
이런 방식으로 이전 줄의 "n"의 영향을 제거할 수 있습니다.