Scanner는 화면, 파일, 문자열과 같은 입력소스로부터 문자데이터를 읽어온다.
각 생성자는 특정한 유형의 데이터소스에 적합하도록 설계되어있으니 우선 가볍게 읽어보며 참고하자.
Scanner (String source)
문자열에서 데이터를 읽어올때, 메모리에 이미 존재하는 문자열을 읽어온다.
// Scanner (String source)
String inputString = "Hello World! 123";
try (Scanner scanner = new Scanner(inputString)) {
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
}
// 출력결과:
// Hello
// World!
// 123
Scanner (File source)
File객체를 읽어올때
// Scanner (File source)
File inputFile = new File("input.txt");
try (Scanner scanner = new Scanner(inputFile)) {
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
} catch (Exception e) {
e.printStackTrace();
}
// (input.txt 파일 내용이 "File Input Example"일 경우) 출력결과:
// File
// Input
// Example
Scanner (InputStream source)
바이트데이터를 읽어올때, 파일이나 네트워크에서 데이터를 읽어올때 사용한다.
// Scanner (InputStream source)
String inputData = "Java Programming";
try (Scanner scanner = new Scanner(new ByteArrayInputStream(inputData.getBytes()))) {
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
}
// 출력결과:
// Java
// Programming
Scanner (Readable source)
객체에서 문자데이터를 읽어올때 사용한다. 예로 StringReader, BufferedReader와 같은 객체를 활용시.
// Scanner (Readable source)
StringReader readable = new StringReader("Read data from Readable");
try (Scanner scanner = new Scanner(readable)) {
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
}
// 출력결과:
// Read
// data
// from
// Readable
Scanner (ReadableByteChannel source)
파일에서 바이트데이터를 읽어올때
// Scanner (ReadableByteChannel source)
try (ReadableByteChannel channel = Channels.newChannel(new FileInputStream("input.txt"));
Scanner scanner = new Scanner(channel)) {
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
} catch (Exception e) {
e.printStackTrace();
}
// (input.txt 파일 내용이 "ByteChannel Input"일 경우) 출력결과:
// ByteChannel
// Input
Scanner (Path source)
파일경로를 이용하여 데이터를 읽어올때
// Scanner (Path source)
Path filePath = Paths.get("input.txt");
try (Scanner scanner = new Scanner(filePath)) {
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
} catch (Exception e) {
e.printStackTrace();
}
// (input.txt 파일 내용이 "Path Input Example"일 경우) 출력결과:
// Path
// Input
// Example
useDelimiter ()
정규표현식을 이용한 검색을 지원해 복잡한 형태의 구분자도 처리한다.
Scanner useDelimiter (Pattern pattern)
// Scanner useDelimiter (Pattern pattern)
String inputString = "apple,orange;banana.apple-orange";
Pattern delimiterPattern = Pattern.compile("[,;.-]+");
try (Scanner scanner = new Scanner(inputString)) {
scanner.useDelimiter(delimiterPattern);
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
}
// 출력결과:
// apple
// orange
// banana
// apple
// orange
// 설명: 정규표현식을 이용한 검색을 지원하는 useDelimiter 메서드를 사용하여
// 구분자 [,;.-]+로 문자열을 분리합니다.
Scanner useDelimiter (String pattern)
// Scanner useDelimiter (String pattern)
String inputString = "apple,orange;banana.apple-orange";
try (Scanner scanner = new Scanner(inputString)) {
scanner.useDelimiter("[,;.-]+");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
}
// 출력결과:
// apple
// orange
// banana
// apple
// orange
// 설명: 정규표현식을 이용한 검색을 지원하는 useDelimiter 메서드를 사용하여
// 구분자 [,;.-]+로 문자열을 분리합니다
'JAVA' 카테고리의 다른 글
java.math.BigInteger long보다 큰 정수값을 계산할때 (0) | 2023.12.26 |
---|---|
String.split()의 구식 api, java.util.StringTokenizer (0) | 2023.12.26 |
java.util.Random 클래스 (0) | 2023.12.22 |
Object클래스를 보완하다, java.util.Objects 클래스 (0) | 2023.12.22 |
StrictMath 클래스와 Math클래스 (0) | 2023.12.22 |