JAVA/JAVA TIP

JAVA txt(file) 불러오기 예제 (split)

건강한너구리 2021. 11. 8. 16:24

 

 

이번에 해볼 거는 저번에 작성했던 글에서 말한 랜덤으로 문제 제출하는 알고리즘을 만들까 합니다.

 

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 하나밖에 없어요.

 

현재 제가 만든 메모장에는 산수 문제가 들어있습니다.

 

note.txt

 

이 메모장에서 나눠야할 값은 뭘까요.

바로 " = " 입니다. 

 

 

 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]로 잘려서 배열에 저장됩니다.

기준점이 되는 "="는 잘리게되면서 저장되지 않아 나중에 콘솔 창에 보여주려면 추가해줘야 합니다.

 

Array에 저장된 값들

 

자 이제 랜덤 함수와 조건문 조금만 섞어주면 완성입니다.

 

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문을 섞고 종료 조건을 넣어주면 됩니다.

 

 

끝으로 주관식으로 문제를 작성하다 보면 이런 방식으로 어려움을 느낄 겁니다.

 

방법이 없는 건 아니지만 이거보다는 난이도가 좀 높겠죠? 하지만 조금만 생각하면 주관식도 충분히 할 수 있다고 생각합니다. 

예를 들어 제가 적어놓은 주관식에서 문자열 몇 개가 맞으면 정답이 처리되게 할 수도 있습니다.