Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

재훈재훈

문자열 다루기 예제 2 - index maker 본문

Computer Engineering/JAVA

문자열 다루기 예제 2 - index maker

jaehoonx2 2018. 4. 7. 17:23

소스 출처 - 부경대 권오흠 교수님, <JAVA로 배우는 자료구조> 강의


/*

index maker

1.입력으로 하나의 텍스트 파일을 읽는다 (sample.txt).

2.텍스트 파일에 등장하는 모든 단어들의 목록을 만들고, 각 단어가 텍스트 파일에

3.등장하는 횟수를 센다. 단, 단어 개수는 100,000개 이하라고 가정한다.

4.사용자가 요청하면 단어 목록을 하나의 파일로 저장한다.

5.사용자가 단어를 검색하면 그 단어가 텍스트 파일에 몇 번 등장하는지 출력한다.

 */


import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Scanner;


public class Code22 {


static String [] words = new String[100000]; // 단어의 갯수

static int [] count = new int[100000];   // 각 단어의 등장 횟수

static int n = 0;   // 저장된 단어 목록의 길이

//배열은 자동으로 0으로 초기화됨.

public static void main(String[] args){

Scanner kb = new Scanner(System.in);

while(true){

System.out.print("$ ");

String command = kb.next(); // String을 사용자로부터 입력받음


if(command.equals("read")) { // string.equals(anotherstr) -> 문자열 일치한지 체크

String fileName = kb.next();

makeIndex( fileName );

}

else if(command.equals("find")){

String str = kb.next();

int index = findWord(str);

if(index > -1) {

System.out.println("The word " + words[index] + " appears " + count[index] + " times.");

}

else

System.out.println("The word " + str + " does not appear.");

}

else if(command.equals("saveas")){

String fileName = kb.next();

saveAs( fileName );

}

else if(command.equals("exit")){

break;

}

}

kb.close();

}

static void makeIndex(String fileName){

//파일을 열어서 읽어야 함

try {

Scanner inFile = new Scanner( new File(fileName));

while(inFile.hasNext()){

String str = inFile.next(); 

addWord( str ); // 내가 읽은 이 str이 첫 단어인가 이미 찾은 단어인가 확인

}

inFile.close();

} catch (FileNotFoundException e) {

System.out.println("No file");

return;

}

}

static void addWord(String str){

int index = findWord(str);  //단어들의 목록에 이 단어가 이미 포함되어 있는지 여부 확인 - 있으면 배열 인덱스 반환, 못찾으면 -1 return

if(index != -1){ //찾았다(있다) words[index] == str

count[index]++;

}

else{ //못찾았다 - 새로운 단어가 등장한 것임

words[n] = str;

count[n] = 1;

n++;

}

}

static int findWord(String str){

for(int i=0; i<n; i++)

if(words[i].equalsIgnoreCase((str))) // equalsIgnoreCase 대소문자 무시하고 단어의 일치 유무 확인

return i; //index 반환

return -1; // 찾는 단어가 없음

}

static void saveAs(String fileName) { // 파일 출력 함수

PrintWriter outFile;

try {

outFile = new PrintWriter(new FileWriter(fileName)); // 그냥 외우기

for(int i=0; i<n; i++)

outFile.println(words[i] + " " + count[i]);

outFile.close();

} catch (IOException e) {

System.out.println("Save failed");

return;

}

}

}