본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

java.util.Scanner 입력소스를 읽다

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 메서드를 사용하여 
// 구분자 [,;.-]+로 문자열을 분리합니다