Scanner(File source)
파일 객체를 이용해 Scanner 생성
Scanner(File source, String charsetName)
charsetName : 파일의 인코딩 charset 선택
Scanner(InputStream source)
데이터 입력 스트림 객체를 이용해 스캐너 생성
Scanner(InputStream source, String charsetName)
charsetName : 입력스트림 바이너리의 인코딩 charset 선택
Scanner(Path source)
source 경로의 파일을 스캔
Scanner scanner= null;
try {
scanner = new Scanner(Paths.get("./fileoutputtest.txt"));
while(scanner.hasNext()){
System.out.println(scanner.next());
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
scanner.close();
}
Scanner(Path source, String charsetName)
charsetName : source 경로의 파일을 읽을때 charset 선택
Scanner(Readable source)
Readable 인터페이스를 구현한 객체를 받아 스캔
Scanner(ReadableByteChannel source)
Scanner(ReadableByteChannel source, String charsetName)
charsetName : source 객체를 읽을때 charset 선택
Scanner(String source)
String 타입 데이터를 스캔
Stream findAll(String patString)
Scanner로 읽은 데이터에서 patString으로 찾은 매칭 정보 객체를 Stream으로 반환
[유사 매소드] Stream findAll(Pattern pattern)
: Pattern 객체를 이용하여 매칭 결과를 Stream으로 반환
// fileoutputtest.txt
this is output Stream test
this is writer test
//
try(Scanner scanner= new Scanner(Paths.get("./fileoutputtest.txt"))) {
// 파일에 없는 패턴을 찾을 경우
System.out.println("파일에 없는 단어로 매칭 테스트");
Stream<MatchResult> unMatchedResults=scanner.findAll("thos is");
System.out.println("matched result size : "+ unMatchedResults.count());
System.out.println();
// 파일에 있는 패턴을 찾을 경우
System.out.println("파일에 있는 단어로 매칭 테스트");
Stream<MatchResult> matchedResults=scanner.findAll("this is");
// 매칭 결과 정보로 MatchResult 객체 2개 생성 확인
matchedResults.forEach(result -> System.out.println(result.toString()));
} catch (IOException e) {
e.printStackTrace();
}
[output]
파일에 없는 단어로 매칭 테스트
matched result size : 0파일에 있는 단어로 매칭 테스트
java.util.regex.MatcherImmutableMatchResult@65ab7765
MatchResult match()
마지막으로 매칭했었던 결과를 리턴
String findWithinHorizon(String pattern, int horizon)
읽은 토큰을 제외하고 남은 데이터의 horizon 길이 내에 pattern에 해당하는 매칭이 있는지 찾아서, 해당되는 String을 리턴 (토큰 단위로 구분하여 찾지 않음(delimiter 무시) )
try(Scanner scanner= new Scanner(Paths.get("./fileoutputtest.txt"))) {
String result=scanner.findWithinHorizon("this is", 7);
System.out.println(result);
scanner.next();
result=scanner.findWithinHorizon("this is", 7);
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
}
[유사 매소드] String findWithinHorizon(Pattern pattern, int horizon)
String findInLine(String pattern)
라인 단위로 패턴에 매칭되는 String을 찾아서 리턴
try(Scanner scanner= new Scanner(Paths.get("./fileoutputtest.txt"))) {
String result=null;
String result2=null;
while(scanner.hasNext()){
result=scanner.findInLine("output");
System.out.println("find output : " +result);
result2=scanner.findInLine("writer");
System.out.println("find writer : " +result2);
System.out.println();
scanner.nextLine();
}
} catch (IOException e) {
e.printStackTrace();
}
[output]
find output : output
find writer : nullfind output : null
find writer : writer
boolean hasNext()
다음 토큰 존재 유무 리턴
boolean hasNext(String pattern)
boolean hasNext(Pattern pattern)
boolean hasNextBigDecimal()
boolean hasNextBigInteger()
boolean hasNextBigInteger(int radix)
boolean hasNextBoolean()
boolean hasNextByte()
boolean hasNextByte(int radix)
boolean hasNextDouble()
boolean hasNextFloat()
boolean hasNextInt()
boolean hasNextInt(int radix)
boolean hasNextLine()
boolean hasNextLong()
boolean hasNextLong(int radix)
boolean hasNextShort()
boolean hasNextShort(int radix)
String next()
다음 토큰을 String 형태로 반환
String next(String pattern)
String next(Pattern pattern)
BigDecimal nextBigDecimal()
BigInteger nextBigInteger()
BigInteger nextBigInteger(int radix)
boolean nextBoolean()
byte nextByte()
byte nextByte(int radix)
double nextDouble()
float nextFloat()
int nextInt()
int nextInt(int radix)
String nextLine()
long nextLong()
long nextLong(int radix)
short nextShort()
short nextShort(int radix)
void close()
스캐너 I/O 자원 반환
Scanner useDelimiter(String pattern)
스캐너 입력 스트림으로 읽은 데이터를 토큰화하여 나눌 구분자 패턴 설정
Pattern delimiter()
스캐너 구분자 패턴 리턴
기본은 java whitespace를 사용 : Unicode space character (SPACE_SEPARATOR
, LINE_SEPARATOR
, or PARAGRAPH_SEPARATOR
)
non-breaking space ('\u00A0'
, '\u2007'
, '\u202F'
)는 제외.
'\t'
, U+0009 HORIZONTAL TABULATION.
'\n'
, U+000A LINE FEED.
'\u000B'
, U+000B VERTICAL TABULATION.
'\f'
, U+000C FORM FEED.
'\r'
, U+000D CARRIAGE RETURN.
'\u001C'
, U+001C FILE SEPARATOR.
'\u001D'
, U+001D GROUP SEPARATOR.
'\u001E'
, U+001E RECORD SEPARATOR.
'\u001F'
, U+001F UNIT SEPARATOR.
Scanner useLocale(Locale locale)
Locale locale()
설정된 locale 리턴
Scanner useRadix(int radix)
숫자를 몇진법으로 읽을 것인지 설정. 기본은 10진법.
int radix()
설정된 radix 리턴
Scanner reset()
Scanner의 설정을 초기화
// Scanner.java
public Scanner reset() {
delimPattern = WHITESPACE_PATTERN; // 구분자 초기화
useLocale(Locale.getDefault(Locale.Category.FORMAT)); // locale 설정 초기화
useRadix(10); // 진법 초기화
clearCache(); //
modCount++; // 이 스캐너의 상태가 변경된 횟수
return this;
}
private void clearCaches() {
hasNextPattern = null; // hasNext()에서 마지막으로 사용한 패턴
typeCache = null; // 마지막으로 스캔된 값
}
Scanner skip(String pattern)
pattern에 해당되는 입력 데이터는 skip
Stream tokens()
구분자로 나눠진 토큰들을 String 형태의 Stream으로 리턴
[참고]