| English | 의미 |
|---|---|
| text file/tekst faɪl/ | 텍스트 파일 |
빈 줄은 무효 토큰이 아닙니다
- 텍스트 파일(text file) 은 빈 줄 다음에
12를 포함합니다. 초기 단계에서hasNextLine()와hasNextInt()모두 참입니다: 정수 토큰 검사(int-token check)는 빈 줄을 포함한 공백을 건너뛰어 12를 찾습니다. oops다음에12가 있는 파일을 비교해 봅시다: 다른 줄이 하나 더 있지만, 그 줄의 다음 토큰은 정수가 아닙니다. 줄 존재(line-presence) 체크만으로 정수 형식을 보장할 수 없으므로, 읽기(read)에 맞는 감지 조건(guard)을 선택해야 합니다.
기본 구분자를 사용하여 빈 줄 뒤에 12가 포함된 Scanner에서 hasNextInt()는 시작 시점에 true를 보고합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
정수 토큰 검사는 공백(빈 줄 포함)을 건너뛰고 정수 토큰 12를 찾습니다.
리더(reader)를出其 소스(source)에 연결하세요
new Scanner(new File("scores.txt"))는 지정된 파일을 읽는 반면,new Scanner(System.in)은 키보드 입력을 읽습니다. 두 메서드 모두 동일한 Scanner 메서드를 제공하지만, 소스와 사용 가능 여부는 다릅니다.- 존재하지 않는 파일을 열 때
FileNotFoundException이 발생할 수 있습니다. 아래 완전한 예제에서는 이를main에서 선언합니다. 실제 애플리케이션에서는 이를.catch로 처리하여 유용한 오류 메시지를 출력할 수도 있습니다. 어떤 선택지라도 데이터 분실은 발생하지 않습니다.
텍스트 파일을 읽으려면 Scanner를 ...에 연결해야 합니다
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
new Scanner(new File("..."))는 파일을 읽습니다
동일한 Scanner 메소드(intNext, nextLine)는 키보드 및 파일 입력 모두에 작동합니다
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
출처(System.in vs File)만 다릅니다
전체 줄 읽기
hasNextLine()는 다음 줄이 있는지 확인하지만_consumed_하지 않습니다. 반대로nextLine()은 해당 줄의 남은 부분과 줄 separators를消费합니다. 빈 줄은 빈 문자열""을 생성할 수 있습니다.- 줄 단위로 기록을 처리할 때는
while (in.hasNextLine()) { String line = in.nextLine(); ... }를 사용하십시오. 빈 기록이 유효한지, 건너뛰어야 하는지, 아니면 무효로 보고해야 하는지를 명확히 결정하십시오.
텍스트 파일 읽기
프로그램이 파일을 줄 단위로 읽는 절차를 따르십시오
읽을 줄이 더 있는지 확인하는 메소드는 무엇입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
hasNextLine()는 nextLine() 읽기를 보장합니다
nextLine() 호출 전에 항상 hasNextLine()을 확인해야 합니다
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
끝을 넘어 읽으면 예외가 발생합니다
매칭 체크와 함께 토큰 읽기
- Scanner의 기본 구분자(delimiter)는 공백입니다.
hasNext()는 토큰이 있는지 확인하고,next()은 이를消费합니다.hasNextInt()는 다음 토큰이 정수로 읽힐 수 있는지 확인하고,nextInt()은 그 정수를消费합니다. while (in.hasNextInt())는oops에서 멈춥니다.even if 12가 따르더라도 그렇습니다. 무효 토큰은 건너뛰고 나중 정수는 유지하는 정책이라면,hasNext()으로 루프를 돌리고,hasNextInt()를 테스트하며, 무효 토큰을next()로消费하십시오.
이 완전한 프로그램은 유효한 정수 토큰의 합계를 계산하고, 건너뛴 모든 토큰을 보고서합니다. oops에 이어 12이 있는 파일의 경우, 이 프로그램은 먼저 Skipped: oops를打印한 후 Total: 12를打印합니다. 예제는 합계가 int 범위 내에 있다고 가정합니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadScores {
public static void main(String[] args) throws FileNotFoundException {
int total = 0;
try (Scanner in = new Scanner(new File("scores.txt"))) {
while (in.hasNext()) {
if (in.hasNextInt()) {
total += in.nextInt();
} else {
System.out.println("Skipped: " + in.next());
}
}
}
System.out.println("Total: " + total);
}
}
Match each read to the guard that checks that kind of input.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
A line-presence check is not an integer-format check.
입력消费 및 파일 해제
- 토큰 루프의 모든 분기는 토큰을消费합니다.消费하지 않고 무효 토큰을 반복적으로 체크하면 Scanner가 같은 위치에 머물러 루프가 무한히 계속될 수 있습니다.
- try-with-resources 블록은 종료 시(예외적 종료 포함) 이 파일 Scanner를 닫습니다. 수동으로 관리할 때는 완료되면
close()를 호출하십시오. 체크는 자원을 닫는 것을 대체할 수 없습니다.
hasNextLine() followed by nextInt()는 매칭 보호장(guard)이 아닙니다. 비정수 토큰은 InputMismatchException를 유발할 수 있으며, 실패한 정수 읽기는 토큰이 여전히 사용 가능하게 남게 합니다. 파일을 거절하거나, 기록을 보고서하거나, 토큰을 명시적으로 건너뛰거나 할지 선택하십시오.
파일을 읽은 후에는 ...해야 합니다
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
in.close()는 파일을 해제합니다
루프 전 데이터 정책 확인
- 입력
8 oops 12의 경우,hasNextInt()인 경우에만 읽는 루프는 총합이 8가 되고oops에서 멈춥니다. 표시된 '건너뛰기-보고' 정책의 총합은 20입니다. 예상치 못한 토큰이 반드시 파일 끝을 의미하지는 않습니다. - 이러한 정책들은 서로 다른 질문에 대한 답입니다. 학생마다 필수 점수가 있다면, 나쁜 토큰을 침묵으로 건너뛰면 기록이 맞지 않게 될 수 있습니다. 모든 나중 토큰을 교체 가능한 점수로 취급하기보다, 해당 기록을 보고서 거절하는 것이 좋습니다.
파일 형식에 따라 줄 또는 토큰 읽기를 선택하십시오. 체크는 upcoming 입력을 inspect하여消费하지 않으며, 매칭 읽기는 이를消费합니다. 무효 데이터를 명시적으로 처리하고, 루프의 모든 분기를 advance하며, 파일 리더를 닫으십시오.
입력 8 oops 12에 대해 표시된 skip-and-report 프로그램은 총합을 몇 가지 출력하나요?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
8를 소비하고 더한 뒤, oops를 소비하고 보고한 뒤, 12를 소비하고 더합니다. 총합은 20입니다.