JAVA_Scanner

승주😊·2021년 3월 29일
0

JAVA

목록 보기
5/7
post-thumbnail

Scanner Class

  • JAVA의 Scanner는 읽은 바이트를 문자, 정수, 실수, Boolean, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스!
  • Scanner 클래스를 통해 정수, 실수, 문자열 등을 읽어 올수 있다!

Scanner 사용법

import java.util.Scanner;
  • Scanner는 java.util 패키지에 포함되어 있으므로 Scanner사용을 위해서는 위 패키지 import 필수!
Scanner sc = new Scanner(System.in);
  • Scanner의 객체 생성은 위와 같다.
  • System.in은 입력한 값을 바이트 단위로 읽는 것을 의미한다.
  • Scanner객체 생성후 사용이 끝나면 sc.close()를 통해 Scanner를 닫아 주면 좋음 (하지 않아도 크게 영향은 x)

Scanner 예시

import java.util.Scanner;

public class javaScanner{
 
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        String name;
        int age;
        double height;
        
        name = scan.next();
        age = scan.nextInt();
       height = scan.nextDouble();
        
        System.out.println(name+ age + height);   
        
        sc.close();
    }
 }

Scanner 함수

  • 특정 데이터 유형의 값을 읽기 위해 사용하는 함수는 다음과 같다.
함수명설명
next()다음 토큰을 문자열로 반환
nextByte()다음 토큰을 byte 타입으로 리턴
nextShort()다음 토큰을 short타입으로 리턴
nextInt()다음 토큰을 int타입으로 리턴
nextLong()다음 토큰을 long타입으로 리턴
nextFloat()다음 토큰을 float타입으로 리턴
nextDouble()다음 토큰을 double타입으로 리턴
nextLine()'\n'(공백)을 포함하는 한 라인을 읽고,'\n'을 버린 나머지만 리턴
hasNext()현재 입력된 토큰이 있으면 true를 반환
입력이 없을 시 새로운 입력이 들어올 때까지 대기 & 새로운 입력시 true 반환
ctrl +z가 입력되면 끝으로 인식해서 false반환
close()Scanner 사용 종료

Scanner 함수 사용 주의사항

1. 공백을 포함해서 읽어와야할 여지가 있을 때 nextLine 사용

<예제> 이름이 '홍길동 친구'이고 나이가 80이라고 가정

System.out.print("이름을 입력하세요: ");

name = sc.next();

System.out.print("나이를 입력하세요: ");

age = sc.nextInt();

System.out.println("이름: "+name+" 나이: "+age);

이렇게 할 경우 결과값은...

이름을 입력하세요: 홍길동 친구
나이를 입력하세요:
이름: 홍길동 나이: 친구

이렇게 나오고, 나이는 입력할 수 없게 된다.

  • 그 이유는, next+자료형()의 경우 토큰 단위로 입력을 받아오기 때문에 첫번째 입력에서 '홍길동'만 받아오게 된다. 남아있던 '친구'가 두번째 입력으로 들어가게 된다.
    (입력을 받지 않고 남아있던게 입력으로 들어감)
  • 따라서 공백을 포함하여 입력할 시 nextLine()을 사용해야한다.
System.out.print("이름을 입력하세요: ");

name = sc.nextLine();

System.out.print("나이를 입력하세요: ");

age = sc.nextInt();

System.out.println("이름: "+name+" 나이: "+age);

결과값...

 이름을 입력하세요: 홍길동 친구
 나이를 입력하세요: 80
 이름: 홍길동 친구 나이: 80

2. nextLine() 함수와 next+자료형() 함수를 같이 사용할 경우 주의가 필요!!

  • next+자료형() 함수들의 경우, Enter값을 무시하고 해당 타입만 변환하여 반환 => 컴퓨터 내부에는 아직 Enter값이 남아있음
  • 이후 nextLine()을 쓸 경우, 뒤에 원하는 값을 읽지 못하고 Enter값을 받아들이게 된다!

예제

        System.out.print("나이를 입력하세요:");
        age = scan.nextInt();
        System.out.println("이름을 입력하세요:");
        name = scan.nextLine();
 
        System.out.println("나이: "+ age+"이름: "+ name);

        sc.close();
    }
 
}

결과값...

나이를 입력하세요: 80
이름을 입력하세요: 나이: 80 이름: 
  • 이 경우 nextInt()가 Enter값을 무시하고 해당 타입만 변환하여 가지고 간다. 즉 컴퓨터 내부에는 Enter값이 아직 남아있게 된다.
  • 이 후 nextLine()에서 Enter값을 받아들이기 때문에 이름을 입력하지도 않았는데 다음 출력문이 실행된다.

주의사항 요약

  1. Scanner 클래스의 객체를 만들려면 표준 입력 스트림을 나타내는 System.in이라는 이미 정의된 객체를 전달해야한다.
  2. 특정 데이터 유형의 값을 읽기 위해서 사용하는 함수는 next+자료형() 함수이다.
  3. next()함수는 공백을 포함하지 않고 문자열을 읽어오고, nextLine()함수는 한줄(공백 포함) 모두를 읽어온다.
  4. 단일 문자(char)를 읽을 때는 next()와 charAt() 함수를 모두 사용 가능하다.
profile
All the Best❤

0개의 댓글