게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
자바로 html 명령어 분석기를 만드려고 합니다.
게시물ID : programmer_14628짧은주소 복사하기
작성자 : 중체
추천 : 0
조회수 : 745회
댓글수 : 1개
등록시간 : 2015/11/27 16:01:49
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class fileinput {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new RS();
 }
}
class RS extends Frame implements ActionListener {
 TextArea order_area;
 Panel p1, p2;
 Button b1, b2;
 public RS() {
  setLayout(new GridLayout(2, 1));
  order_area = new TextArea("명령어를 입력해주세요.");
  order_area.selectAll();
  p1 = new Panel();
  p2 = new Panel();
  b1 = new Button("분석하기");
  b2 = new Button("html 명령어 모음집");
  b1.addActionListener(this);
  b2.addActionListener(this);
  p1.add(order_area);
  p2.add(b1);
  p2.add(b2);
  add(p1);
  add(p2);
  setSize(500, 300);
  setTitle("문서 분석기");
  setVisible(true);
  setLocation(100, 400);
  addWindowListener(new WH());
 }
 public void actionPerformed(ActionEvent o) {
  if (o.getActionCommand() == "분석하기") {
   Frame frame_bunsuk = new Frame("분석 프레임");
   TextArea tf1 = new TextArea();
   // tf1은 분석 프레임
   frame_bunsuk.add(tf1);
   // --------------------------------------------------------------------------
   int i;
   InputStream is = null;
   try {
    is = new FileInputStream("C:\\Users\\618\\Desktop\\HTML.txt");
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println("파일이 존재하지 않습니다.");
    setVisible(false);
    System.exit(0);
   }
   StringBuffer sb = new StringBuffer();
   byte[] b = new byte[4096]; // 4096크기의 바이트를 생성
   try {
    while ((i = is.read(b)) != -1) { // 문서 끝날 때 까지 계속 돌아감
     sb.append(new String(b, 0, i)); // sb에 메모장 파일에 있는 내용 넣는 기능
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    setVisible(false);
    System.exit(0);
   }
   // --------------------------------------------------------------------------
   // 메모장에서 html 명령어를 들고 옴
   ArrayList<String> arr_textcut = new ArrayList<String>(); // 텍스트 자른
                  // 것을 넣는
                  // ArrayList
   ArrayList<String> arr_inputcut = new ArrayList<String>(); // 메모장 자른
                  // 것을 넣는
                  // ArrayList
   ArrayList<String> arr_order = new ArrayList<String>(); // 존재하는 명령어를
                 // 넣음
   Map<String, Double> map = new HashMap<String, Double>(); // 저장한 것을
                  // 넣을
   // HashMap
   Sort bvc = new Sort(map);
   TreeMap<String, Double> sorted_map = new TreeMap<String, Double>(bvc);
   String textarea = order_area.getText().toString();
   textarea = textarea.replaceAll("<", " <");
   textarea = textarea.replaceAll("=", " =");
   StringTokenizer token_textarea = new StringTokenizer(textarea); // 텍스트어리어를
   // 잘라서
   // 넣음
   StringTokenizer token_input = new StringTokenizer(sb.toString()); // 메모장에서
   // 받아온
   // 값의
   // 띄어쓰기를
   // 잘라서
   // 넣음
   double sum1;
   int j;
   for (j = 0; token_textarea.hasMoreTokens(); j++) {
    arr_textcut.add(token_textarea.nextToken()); // 텍스트 어리어 자른 걸
    // arr_textcut
    // ArrayList에 넣음
   }
   for (j = 0; token_input.hasMoreTokens(); j++) {
    arr_inputcut.add(token_input.nextToken()); // input값 자른 걸
    // arr_inputcut
    // ArrayList에 넣음
   }
   for (j = 0; j < arr_inputcut.size(); j++) {
    sum1 = 0;
    for (int k = 0; k < arr_textcut.size(); k++) {
     if (arr_textcut.get(k).equals(arr_inputcut.get(j))) {
      sum1++;
     }
    }
    if (sum1 != 0) {
     String cut = arr_inputcut.get(j);
     map.put(cut, sum1);
     for (int q = 0; q < cut.length() - 1; q++) {
      if (cut.substring(q, q + 1).equals("/")) {
       cut = (String) cut.replace("/", "");
       map.put(cut, sum1);
      }
     }
    }
   }
   sorted_map.putAll(map);
   String bunsuk = "";
   for (String key : sorted_map.keySet()) {
    bunsuk = bunsuk + key + "의 갯수 : " +  sorted_map.get(key) + "\n"
      + "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n";
   }
   tf1.setText(bunsuk);
   frame_bunsuk.setVisible(true);
   frame_bunsuk.setSize(500, 400);
   frame_bunsuk.setLocation(700, 400);
   frame_bunsuk.addWindowListener(new WH());
  } else if (o.getActionCommand() == "html 명령어 모음집") {
   String cmdName = "explorer http://www.htmlgoodies.com/beyond/reference/article.php/3472981/All-HTML-Commands.htm ";
   try {
    Runtime.getRuntime().exec(cmdName);
   } catch (IOException e) {
    System.out.println("해당하는 사이트가 존재하지 않습니다.");
   }
  }
 }
}
class WH extends WindowAdapter {
 public void windowClosing(WindowEvent e) {
  Window w = e.getWindow();
  w.setVisible(false);
  w.dispose();
 }
}
class Sort implements Comparator<Object> {
 Map<String, Double> base;
 public Sort(Map<String, Double> base) {
  this.base = base;
 }
 public int compare(Object a, Object b) {
  if (base.get(a) < base.get(b)) {
   return 1;
  } else if (base.get(a) == base.get(b)) {
   return 0;
  } else {
   return -1;
  }
 }
}
이런 식으로 짰는데, html 명령어는 메모장으로 받아오고 html 내용은 awt 패키지를 써서 TextArea에서 갖고 옵니다.
 
html 명령어를 보면 <명려어> 이게 여는 명령어 </명령어> 이게 닫는 명령어라서
 
</명령어>를 찾으면 그 명령어(key)와 빈도수(value)를 hashmap에 넣고 여기서 /를 뺀 <명령어>(key)와 빈도 수(value)를 또 hashmap에 넣습니다.
 
그리고 그 hashmap을 treemap으로 전환하는 과정에서 Sort 클래스를 끌고옵니다.
 
Sort 클래스는 빈도수(value)를 이용해서 내림차순 식으로 출력을 시키는 거구요..
 
그런데 출력을 시키는 과정에서 자꾸 빈도수(value)가 Null 값이 뜨는 게 있더라구요..
 
그래서 따로 hashmap만 출력시켜봤는데 hashmap의 내용은 그대로입니다. 무엇이 문제인지..ㅠ
캡처.PNG
 
ㄱ그리고 출력 시킬 때 빈도수 숫자 뒤에 000.0 이런 식으로 뜨는 거
 
이걸 iint b = (int) value값 이런식으로 해도 안되던데 방법이 있나요..?
 
프로그램 초짜라 소스 코드가 많이 난잡하지만.. 부디 부탁드립니다..ㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호