JAVA txt(file) 불러오기 예제 (split)
이번에 해볼 거는 저번에 작성했던 글에서 말한 랜덤으로 문제 제출하는 알고리즘을 만들까 합니다.
https://pjh-raccoon.tistory.com/12
JAVA txt(file) 불러오기 및 추가 방법
기본적으로 텍스트 파일을 불러오는 방법은 매우 간단합니다. 파일 불러오기 -> 파일 읽기 -> 저장 및 출력 저는 이렇게 3단계로 분류하는데 하나씩 살펴볼게요. File note = new File("C:/Users/user/Desktop/
pjh-raccoon.tistory.com
위의 글에서 만들었던 코드를 가지고 변형해서 만들어볼게요.
준비할 건 메모장에 문제만 넣어놓으면 됩니다.
static ArrayList<String> N_list = new ArrayList<String>();
File note = new File("C:/Users/user/Desktop/js/note.txt");
try{
BufferedReader br = new BufferedReader(new FileReader(note));
String str = br.readLine();
while(str != null){
N_list.add(str);
str = br.readLine();
}
br.close();
} catch (NullPointerException e){
e.getStackTrace();
} catch (FileNotFoundException e){
e.getStackTrace();
} catch (IOException e){
e.getStackTrace();
}
}
저번 글에서 만들었던 코드입니다. 여기서 추가할 건 split 하나밖에 없어요.
현재 제가 만든 메모장에는 산수 문제가 들어있습니다.
이 메모장에서 나눠야할 값은 뭘까요.
바로 " = " 입니다.
ArrayList<String> N_list_1 = new ArrayList<String>(); //문제를 담을 array
ArrayList<String> N_list_2 = new ArrayList<String>(); // 답을 담을 array
File note = new File("C:/Users/user/Desktop/js/note.txt");
try{
BufferedReader br = new BufferedReader(new FileReader(note));
String[] str = br.readLine().split("=");
while(str != null){
N_list_1.add(str[0]); // 문제
N_list_2.add(str[1]); // 답
str = br.readLine().split("=");
}
br.close();
} catch (NullPointerException e){
e.getStackTrace();
} catch (FileNotFoundException e){
e.getStackTrace();
} catch (IOException e){
e.getStackTrace();
}
System.out.println(N_list_1);
System.out.println(N_list_2);
}
추가된 코드를 보면 문제를 받을 Array와 답을 받을 Array 이렇게 두 개와 읽어오는 문자열을 "="을 기준으로
[0] , [1] 로 나눠서 저장했습니다.
split으로 문자열을 자르게 되면 "=" 기준으로 (1+1) 은 [0]에 (2) 은 [1]로 잘려서 배열에 저장됩니다.
기준점이 되는 "="는 잘리게되면서 저장되지 않아 나중에 콘솔 창에 보여주려면 추가해줘야 합니다.
자 이제 랜덤 함수와 조건문 조금만 섞어주면 완성입니다.
Random rd = new Random(); // 랜덤함수 선언
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); // 답 입력을 위한 입력문 선언
int Rand = rd.nextInt(N_list_1.size()); // 문제의 수 만큼 랜덤한 값을 구함
System.out.print(N_list_1.get(Rand)+" = ");
String result = bf.readLine(); // 입력
if(result.equals(N_list_2.get(Rand))){ // 입력한 값이 저장된 답과 같으면 성공
System.out.println("Success!");
}else{
System.out.println("Fall.."); // 입력한 값이 저장된 답과 다르면 실패
}
이 정도만 추가해 주면 됩니다. 코드 설명은 주석에 달아놨으니 보시면 금방 하실 거예요.
※입력문은 BufferedReader 만 있는 게 아닙니다! (다음에 다루게 되면 링크 달아놓겠습니다.)
여기서 한 번만 말고 원할 때 종료하는 방법을 원하신다면 중간에 while문을 섞고 종료 조건을 넣어주면 됩니다.
끝으로 주관식으로 문제를 작성하다 보면 이런 방식으로 어려움을 느낄 겁니다.
방법이 없는 건 아니지만 이거보다는 난이도가 좀 높겠죠? 하지만 조금만 생각하면 주관식도 충분히 할 수 있다고 생각합니다.
예를 들어 제가 적어놓은 주관식에서 문자열 몇 개가 맞으면 정답이 처리되게 할 수도 있습니다.