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());
}
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의 내용은 그대로입니다. 무엇이 문제인지..ㅠ
ㄱ그리고 출력 시킬 때 빈도수 숫자 뒤에 000.0 이런 식으로 뜨는 거
이걸 iint b = (int) value값 이런식으로 해도 안되던데 방법이 있나요..?
프로그램 초짜라 소스 코드가 많이 난잡하지만.. 부디 부탁드립니다..ㅠ