java scanner class tutorial with examples
이 자습서에서는 다양한 메서드, 스캐너 API 및 예제와 함께 Java의 스캐너 클래스를 가져오고 사용하는 방법에 대해 설명합니다.
우리는 이미 표준 I / O 장치에서 데이터를 읽고 쓰기 위해 Java에서 사용하는 표준 입력-출력 방법을 보았습니다.
Java는 사용자 입력을 읽는 또 다른 메커니즘을 제공합니다. 이것은 Scanner 클래스입니다. 매우 효율적이지는 않지만 Scanner 클래스는 Java 프로그램에서 입력을 읽는 가장 쉽고 선호되는 방법입니다.
학습 내용 :
자바 스캐너 클래스 : 심층보기
스캐너 클래스는 주로 입력을 스캔하고 int, decimal, double 등과 같은 기본 (내장) 데이터 유형의 입력을 읽는 데 사용됩니다. 스캐너 클래스는 기본적으로 일부 구분자 패턴을 기반으로 토큰 화 된 입력을 반환합니다. 따라서 일반적으로 dt 유형을 읽으려면 nextdt () 함수를 사용하여 입력을 읽을 수 있습니다.
Scanner 클래스는 Iterator (문자열), Closeable 및 AutoCloseable 인터페이스를 구현합니다.
이제이 Scanner 클래스의 세부 사항을 살펴 보겠습니다.
스캐너 가져 오기
스캐너 클래스는 'java.util'패키지에 속합니다. 따라서 프로그램에서 Scanner 클래스를 사용하려면 다음과 같이이 패키지를 가져와야합니다.
import java.util. *
또는
import java.util.Scanner;
위의 문 중 하나는 Scanner 클래스와 프로그램의 기능을 가져옵니다.
자바 스캐너 클래스
Scanner 클래스를 Java 프로그램으로 가져 오면이를 사용하여 다양한 데이터 유형의 입력을 읽을 수 있습니다. 표준 입력 또는 파일 또는 채널에서 입력을 읽을 지 여부에 따라 미리 정의 된 적절한 개체를 Scanner 개체에 전달할 수 있습니다.
다음은 Scanner 클래스 사용의 기본 예입니다.
import java.util.*; public class Main { public static void main(String args()) { Scanner in = new Scanner (System.in); System.out.print ('Enter a String: '); String mystr = in.nextLine(); System.out.println('The String you entered is: ' + mystr); in.close(); } }
산출:
위 프로그램에서는 Scanner 클래스 객체를 생성하면서“System.in”(표준 입력)을 객체로 제공했습니다. 그런 다음 표준 입력에서 문자열 입력을 읽습니다.
스캐너 API (생성자 및 방법)
이 섹션에서는 Scanner 클래스 API를 자세히 살펴 보겠습니다. Scanner 클래스에는 System.in, 파일 입력, 경로 등과 같은 다양한 입력 방법을 수용하기 위해 다양한 오버로드 된 생성자가 포함되어 있습니다.
다음 표는 각 Scanner 클래스 생성자의 프로토 타입과 설명을 제공합니다.
우선 순위 대기열 자바를 사용하는 dijkstra의 알고리즘
하지 마라 | 원기 | 기술 |
---|---|---|
7 | 스캐너 (경로 소스, 문자열 charsetName) | 이 생성자는 지정된 파일을 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
1 | 스캐너 (InputStream 소스) | 이 생성자는 새 InputStream, 소스를 스캔하고 값을 생성하는 새 Scanner를 구성합니다. |
두 | 스캐너 (InputStream 소스, 문자열 charsetName) | 이 생성자는 새 InputStream, 소스를 스캔하고 값을 생성하는 새 Scanner를 구성합니다. |
삼 | 스캐너 (파일 소스) | 이 생성자는 지정된 파일을 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
4 | 스캐너 (파일 소스, 문자열 charsetName) | 이 생성자는 지정된 파일을 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
5 | 스캐너 (문자열 소스) | 이 생성자는 지정된 문자열을 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
6 | 스캐너 (경로 소스) | 이 생성자는 지정된 파일을 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
8 | 스캐너 (읽을 수있는 소스) | 이 생성자는 지정된 소스를 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
9 | 스캐너 (ReadableByteChannel 소스) | 이 생성자는 지정된 채널을 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
10 | 스캐너 (ReadableByteChannel 소스, 문자열 charsetName) | 이 생성자는 지정된 채널을 스캔하고 값을 생성하는 새 스캐너를 구성합니다. |
생성자와 마찬가지로 Scanner 클래스는 입력을 스캔하고 읽는 데 사용되는 다양한 메서드도 제공합니다. 입력의 다음 토큰이 특정 데이터 유형의 토큰인지 확인할 수있는 다양한 부울 메서드를 제공합니다.
각 생성자에 대해 미리 정의 된 입력 개체와 함께 하나의 인수 만 제공하거나 미리 정의 된 입력 개체와 문자 집합으로 구성된 두 개의 인수를 제공 할 수 있습니다. 하나의 인수의 경우 기본 문자 집합이 가정됩니다.
각 데이터 유형의 토큰을 검색하는 방법도 있습니다.
다른 방법으로는 로케일, 기수, 패턴 일치, 스캐너 닫기 등을 설정하는 방법이 있습니다.
다음 표는 각 기본 Scanner 메소드의 프로토 타입과 설명을 제공합니다.
하지 마라 | 원기 | 기술 |
---|---|---|
7 | 부울 hasNextFloat () | 스캐너 입력의 다음 토큰이 float 유형인지 확인합니다. |
1 | 부울 hasNext () | 스캐너 입력에 다른 토큰이 있으면 true를 반환합니다. |
두 | 부울 hasNextBigDecimal () | 스캐너 입력의 다음 토큰이 bigDecimal 유형인지 확인합니다. |
삼 | 부울 hasNextBigInteger () | 스캐너 입력의 다음 토큰이 bigInteger 유형인지 확인합니다. |
4 | 부울 hasNextBoolean () | 스캐너 입력의 다음 토큰이 부울 유형인지 확인합니다. |
5 | 부울 hasNextByte () | 스캐너 입력의 다음 토큰이 Byte 유형인지 확인합니다. |
6 | 부울 hasNextDouble () | 스캐너 입력의 다음 토큰이 이중 유형인지 확인합니다. |
8 | 부울 hasNextInt () | 스캐너 입력의 다음 토큰이 정수 유형인지 확인합니다. |
9 | 부울 hasNextLine () | 스캐너 입력의 다음 토큰이 다른 줄인지 확인합니다. |
10 | 부울 hasNextLong () | 스캐너 입력의 다음 토큰이 긴 유형인지 확인합니다. |
열한 | 부울 hasNextShort () | 스캐너 입력의 다음 토큰이 짧은 유형인지 확인합니다. |
12 | 문자열 next () | 다음 완전한 토큰에 대한 입력을 스캔합니다. |
13 | BigDecimal nextBigDecimal () | 다음 BigDecimal 토큰에 대한 입력을 스캔합니다. |
14 | BigInteger nextBigInteger () | 다음 BigInteger 토큰에 대한 입력을 스캔합니다. |
열 다섯 | 부울 nextBoolean () | 다음 부울 토큰에 대한 입력을 스캔합니다. |
16 | 바이트 nextByte () | 다음 바이트 토큰에 대한 입력을 스캔합니다. |
17 | 더블 nextDouble () | 다음 Double 토큰에 대한 입력을 스캔합니다. |
18 | nextFloat () 부동 | 다음 부동 토큰에 대한 입력을 스캔합니다. |
19 | Int nextInt () | 다음 정수 토큰에 대한 입력을 스캔합니다. |
이십 | 문자열 nextLine () | Scanner 개체에서 건너 뛴 입력 문자열 가져 오기 |
이십 일 | long nextLong () | 다음 Long 정수 토큰에 대한 입력을 스캔합니다. |
22 | 짧은 nextShort () | 다음 Short 정수 토큰에 대한 입력을 스캔합니다. |
2. 3 | 스캐너 재설정 () | 현재 사용중인 스캐너 재설정 |
24 | 스캐너 skip () | 구분 기호를 무시하고 주어진 패턴과 일치하는 입력을 건너 뜁니다. |
25 | 스캐너 useDelimiter () | 구분 패턴을 지정된 패턴으로 설정 |
26 | 스캐너 useLocale () | 지정된 로케일로 스캐너 로케일 객체 설정 |
27 | 스캐너 useRadix () | 지정된 기수를 스캐너의 기본 기수로 설정 |
28 | 정수 기수 () | 현재 스캐너의 기본 기수를 반환합니다. |
29 | 무효 제거 () | Iterator가 제거 작업을 지원하지 않을 때 사용할 수 있습니다. |
30 | 스트림 토큰 () | 현재 Scanner에서 분리 문자로 구분 된 토큰 스트림을 반환합니다. |
31 | 문자열 toString () | 현재 사용중인 지정된 Scanner의 반환 문자열 표현 |
32 | IOException ioException () | Scanner 객체에서 읽을 수있는 마지막에 발생한 IOException을 반환합니다. |
33 | findALL () 스트림 | 주어진 패턴과 일치하는 일치 결과의 스트림을 반환합니다. |
3. 4 | 문자열 findInLine () | 주어진 문자열에서 패턴의 다음 발생을 찾습니다. 구분 기호 무시 |
35 | 문자열 findWithinHorizon () | 주어진 문자열에서 패턴의 다음 발생을 찾습니다. 구분 기호 무시 |
36 | 패턴 구분자 () | 현재 스캐너에서 사용하는 패턴을 반환합니다. |
37 | 무효 close () | 스캐너를 닫습니다. |
38 | MatchResult match () | 마지막 스캔 작업의 일치 결과를 반환합니다. |
39 | 로컬 로컬 () | 현재 스캐너의 로케일 반환 |
검사 여기 스캐너 방법에 대해 자세히 알아보십시오.
Java에서 스캐너를 사용하는 방법?
Scanner 클래스에서 제공하는 다양한 생성자와 메서드를 살펴 보았으므로 이제 Java에서 Scanner 클래스를 사용하는 방법을 보여주는 몇 가지 예제를 구현해 보겠습니다.
다음 구현은 Scanner 클래스를 사용하여 System.in, 즉 표준 입력에서 입력을 읽는 방법을 보여줍니다.
여기에서는 미리 정의 된 System.in 개체를 사용하여 Scanner 개체를 만듭니다. 그러면 사용자에게 이름, 클래스 및 백분율을 입력하라는 메시지가 표시됩니다. 이러한 모든 세부 정보는 Scanner 클래스 개체를 사용하여 읽습니다.
다양한 유형의 입력을 읽기 위해 Scanner 개체가 사용하는 방법에 유의하십시오. 이름이 문자열이므로 Scanner 객체는 next () 메서드를 사용합니다. 클래스 입력에는 nextInt ()를 사용하고 백분율에는 nextFloat ()를 사용합니다.
이러한 방식으로 읽는 동안 입력을 쉽게 분리 할 수 있습니다.
프로그램의 출력은 입력중인 입력과 표시된 정보를 보여줍니다.
import java.util.*; public class Main{ public static void main(String ()args){ String name; int myclass; float percentage; //creating object of Scanner class Scanner input = new Scanner(System.in); System.out.print('Enter your name: '); name = input.next(); System.out.print('Enter your class: '); myclass = input.nextInt(); System.out.print('Enter your percentage: '); percentage = input.nextFloat(); input.close(); System.out.println('Name: ' + name + ', Class: '+ myclass + ', Percentage: '+ percentage); } }
산출:
스캐너 문자열
이미 언급했듯이 Scanner 개체를 만드는 동안 미리 정의 된 다양한 개체를 사용할 수 있습니다. 즉, 표준 입력, 파일 및 다양한 I / O 채널 또는 문자열에서 입력을 읽을 수 있습니다.
문자열 입력이 사용되면 그 안에 정규식을 사용할 수도 있습니다.
다음 예제는 Scanner가 문자열을 입력으로 사용하는 프로그램을 보여줍니다. 그런 다음이 입력을 스캔하고 각 토큰을 읽어 토큰을 분리합니다.
그러면 읽은 토큰이 출력에 표시됩니다.
import java.util.*; public class Main{ public static void main(String ()args){ System.out.println ('The subjects are as follows :'); String input = '1 Maths 2 English 3 Science 4 Hindi'; Scanner s = new Scanner(input); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); s.close(); } }
산출:
스캐너 닫기
Java Scanner 클래스는 'Close ()'메소드를 사용하여 Scanner를 닫습니다. Scanner 클래스는 내부적으로 Closeable 인터페이스를 구현하므로 Scanner가 아직 닫히지 않은 경우 기본 Readable 인터페이스가 close 메서드를 호출합니다.
사용이 끝나면 Close () 메서드를 사용하여 Scanner를 명시 적으로 닫는 것이 좋은 프로그래밍 방법입니다.
노트 : Scanner 개체가 닫혀 있고 검색을 시도하면 'IllegalStateException'이 발생합니다.
자주 묻는 질문
Q # 1) Java의 Scanner 클래스는 무엇입니까?
대답: Scanner 클래스는 Java의 'java.util'패키지의 일부이며 int, float, strings 등과 같은 다양한 기본 데이터 유형의 입력을 읽는 데 사용됩니다.
자바 대 C ++
Q # 2) Scanner 클래스의 next () 메소드와 nextLine () 메소드의 차이점은 무엇입니까?
대답: next () 메소드는 공백까지 입력을 읽고 입력을 읽은 후 동일한 행에 커서를 놓습니다. 그러나 nextLine () 메소드는 공백을 포함하여 행 끝까지 전체 입력 행을 읽습니다.
Q # 3) Java에서 hasNext ()는 무엇입니까?
대답: hasNext () 메소드는 Java Scanner 메소드 중 하나입니다. 스캐너의 입력에 다른 토큰이있는 경우이 메서드는 true를 반환합니다.
Q # 4) 스캐너 클래스를 종료해야합니까?
대답: Scanner 클래스가 닫히지 않은 것처럼 스캐너 클래스를 닫는 것이 좋지만 필수는 아닙니다. Scanner 클래스의 기본 Readable 인터페이스가 작업을 수행합니다. 컴파일러가 닫히지 않은 경우 일부 경고가 깜박일 수 있습니다.
따라서 좋은 프로그래밍 방법으로 항상 스캐너를 닫으십시오.
Q # 5) Scanner 클래스에서“system.in”의 목적은 무엇입니까?
대답: Scanner 클래스에서“System.in”을 사용하면 스캐너가 표준 입력 데이터에 연결된 키보드를 읽을 수 있습니다.
결론
이 자습서에서는 Scanner 클래스와 API 및 구현을 포함한 모든 세부 정보를 확인했습니다. 스캐너 클래스는 표준 입력, 파일, IO 채널, 정규식이 있거나없는 문자열 등과 같은 다양한 매체에서 입력 데이터를 읽는 데 사용됩니다.
Scanner는 입력을 읽는 데 매우 효율적인 방법은 아니지만 가장 쉬운 방법 중 하나입니다. Scanner를 사용하면 int, float, strings 등과 같은 다양한 기본 데이터 유형의 입력을 읽을 수 있습니다. Scanner 클래스의 입력 개체로 문자열을 사용할 때 정규식을 사용할 수도 있습니다.
Scanner 클래스를 사용하면 일부 패턴 또는 구분 기호를 일치시켜 입력을 읽을 수도 있습니다.
결론적으로 Java에서 Scanner 클래스를 사용하는 것은 입력을 읽는 가장 쉽고 선호되는 방법입니다.
=> 여기에서 완벽한 Java 교육 가이드를 확인하십시오.