본문 바로가기

JAVA/JAVA Programming

[JAVA] 문서(txt)파일내 해당단어 중복제거하여 검색하기

반응형

참조 : 문자열 검색, 문자 찾기, 지정한 파일 속에서 : Find String(GREP) Example


TextReader.java


  TextReader.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.regex.PatternSyntaxException;

class TextReader {
   
    public static void main(String[] args) {

        String[] search = new String[2];
        TreeSet<String> overlapList = new TreeSet<String>();
       
        search[0] = "GV_";                          // 'GV_' 단어를 가지고 있는 모든 열을 검색한다.
        search[1] = "testText.txt";        // 검색할 *.txt 파일의 파일명(확장자까지 같이 적어줘야 한다.)

        // (?i) <- "찾을 문자열"에 대소문자 구분을 없애고
        // .*   <- 문자열이 행의 어디에 있든지 찾을 수 있게
        String findStr = "(?i).*" + search[0] + ".*";

        // int lineNumber = 1;    // 행 번호


        try {
           
            BufferedReader buffer = new BufferedReader(new FileReader(search[1]));
            String low = null;

            while ((low = buffer.readLine()) != null) {
                               
                String[] piece = low.split("[ =><()\"\n]");    // 한줄의 모든 문자영을 다 잘라내어 배열로 보관한다.

                for(int i = 0; i < piece.length; i++) {
                   
                    piece[i] = piece[i].trim();
                   
                    if (piece[i].matches(findStr)) {
                       
                        int last = 0;
                                               
                        // lastIndexOf
                        if (piece[i].lastIndexOf("=") != -1) {
                            last = piece[i].lastIndexOf("=");
                        }
                        else if (piece[i].lastIndexOf(">") != -1) {
                            last = piece[i].lastIndexOf(">");
                        }
                        else if (piece[i].lastIndexOf("<") != -1) {
                            last = piece[i].lastIndexOf("<");
                        }
                        else if (piece[i].lastIndexOf("") != -1) {
                            last = piece[i].lastIndexOf("");
                        }
                        else if (piece[i].lastIndexOf(",") != -1) {
                            last = piece[i].lastIndexOf(",");
                        }
                        else if (piece[i].lastIndexOf("\r") != -1) {
                            last = piece[i].lastIndexOf("\r");
                        }
                        // 콤마(.)또한 건색이 가능하나 구분을 지어줄 필요가 있어 주석처리
                        // else if (result[i].lastIndexOf(".") != -1) {
                        //     last = result[i].lastIndexOf(".");
                        // }
                                                                                               
                        String remove = piece[i].substring(0, last);
                       

                        // 문자열 끝에 존재하는 콤마(.), 쉼표(,)를 제거하기 위해 사용
                        if (remove.substring(remove.length()-1).equals(".") || remove.substring(remove.length()-1).equals(",")) {
                            remove = remove.substring(0, remove.length()-1);
                        }
                        overlapList.add(remove);
                    }
                }

                // 몇번째 로우까지 검색할지를 결정알 break문 사용
                // lineNumber++;
                // if (lineNumber > 10) break;
            }
           
            buffer.close();
           
            Iterator<String> result = overlapList.iterator();
           
            while(result.hasNext()) {
                System.out.println(result.next());
            }
           
        } catch (IOException e) {
            System.err.println(e); // 에러가 있다면 메시지 출력
            System.exit(1);
        } catch (PatternSyntaxException e) { // 정규식에 에러가 있다면
            System.err.println(e);
            System.exit(1);
        }
    }
}




반응형