지난 시간의 수정해야할 점에대하여!

 

-소수점, 쉼표 등의 특수기호가 단어에 포함된다.

-숫자 등이 단어로 취급된다.

-단어들이 알파벳 순으로 정렬되면 좋겠다.

 


String 클래스 기본 메서드

 

문자열 동일성 검사

boolean

equals(String)

 

문자열 사전식 순서

int

compareTo(String)

 

문자열 길이

int

length()

 

특정 위치의 문자

char

charAt(int)

 

지정한 문자의 위치검색

int

indexOf(char)

 

지정된 범위의 부분 문자열

String

substring(int,int)

 

package test;

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 code23 {

	static String [] words = new String[100000];
	static int[] count = new int[100000];
	static int n = 0;
	
	public static void main(String[] args) {
		
		Scanner kb = new Scanner(System.in);
		while(true) {
			System.out.print("$ ");
			String command = kb.next();
			if(command.equals("read")) {
				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 +" dose not appears ");
			}
			else if(command.equals("saveas")) {
				String filename = kb.next();
				saveAs(filename);
			}
			else if(command.equals("exit")) {
				break;
			}
			
			
		}
		kb.close();
		
		for(int i=0; i<n; i++) {
			System.out.println(words[i]+" "+count[i]);
		}
	}
	static void makeIndex(String filename){
		
		try {
			Scanner inFile = new Scanner(new File(filename));
			while(inFile.hasNext()) {
				String str = inFile.next();
				
				String trimed = triming(str);
				if(trimed != null) {
					String t = trimed.toLowerCase();
					addWord(t);
				}
			}
			inFile.close();
		} catch (FileNotFoundException e) {
			System.out.print("No File");
			return;
		}
	}
	static String triming(String str) {
		
		int i =0, j = str.length()-1;
		while(i <str.length() && !Character.isLetter(str.charAt(i)))
			i++;
		while(j<str.length() && !Character.isLetter(str.charAt(j)))
			j--;
		
		if(i>j)
			return null;
		return str.substring(i,j+1);
	}
	static void addWord(String str) {
		int index = findWord(str);
		if(index != -1) {
			count[index]++;
		}
		else {
			int i =n-1;
			for(;i>=0  && words[i].compareToIgnoreCase(str)>0;i--) {
				words[i+1] = words[i];
				count[i+1] = count[i];
			}
			words[i+1] = str;
			count[i+1] =1;
			n++;
		}
		
	}
	static int findWord(String str) {
		for(int i=0;i<n;i++) 
			if(words[i].equalsIgnoreCase(str)) {
				return i;
			}
		return -1;
	}
	static void saveAs(String fileName) {
		try {
			PrintWriter 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;
		}
	}
}

addWord findWord makeIndex 함수들을 수정하여 완료하였다.

 

출력파일!!

소문자로 변경되었고 불필요한 특수문자와 단어순서대로 정렬되었다.

+ Recent posts