package filter;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.channels.FileChannel;
import java.util.StringTokenizer;
import java.util.Vector;
public class TagFilter {
private final String fileName = "tmp.html";
private String usedCharset = "UTF-8"; // default charset : UTF-8
public TagFilter(String charset){
usedCharset = charset;
}
public String[] split(String target, String token){
StringTokenizer st = new StringTokenizer(target, token);
String[] ret = new String[st.countTokens()];
String split = null;
int i = 0;
while(st.hasMoreElements()){
split = st.nextToken();
if(split!=null && !split.equals("")){
if(token=="<"){
ret[i] = token + split;
i++;
}else if(token==">"){
if(split.contains("<")){
ret[i] = split + token;
i++;
}else{
ret[i] = split;
i++;
}
}else {
ret[i] = split;
i++;
}
}
}
return ret;
}
// html코드 중에 tag을 걸려 낸다.
public String tagFilter(String str){
String preTag[] = null;
String result = null;
Vector<String[]> strSplit = new Vector<String[]>();
preTag = split(str, "<");
for(int i=0; i<preTag.length; i++){
String[] split = split(preTag[i], ">");
strSplit.add(split);
}
int flag = 0; // 첫번째 문장
for(int i=0; i<strSplit.size(); i++) {
String[] ret = strSplit.get(i);
for(int j=0; j<ret.length; j++){
if((!ret[j].contains("<"))
&&((ret[j]!=" "))
&&((ret[j]!=null))
&&(!(ret[j].equals(null)))
&&(!(ret[j].equals(" ")))
&&(!ret[j].contains(">"))){
if(flag==0){
result = ret[j] + "\n";
flag++;
}else{
result += ret[j] + "\n";
}
}
}
}
result = result.replace(" ", "").replace("\t", "");
// System.out.println(result);
return result;
}
// html 파일 중에서 text만 가져 와서 String을 리턴.
public String parserStr(){
FileInputStream fis = null;
BufferedReader br = null;
FileChannel channel = null;
String ret = null;
try {
fis = new FileInputStream(fileName);
br = new BufferedReader(new InputStreamReader(fis, usedCharset));
String data = null;
while((data=br.readLine())!=null){ //블록 시작전까지는 같은 지역으로 인식 i값을 주지 않아도 초기화에러가 나지 않는다.
ret = tagFilter(data);
}
fis.close();
} catch(IOException ex) {
System.out.println("입출력 예외: " + ex.getMessage());
} finally {
if (channel != null){
try {
channel.close();
}
catch(IOException ex){}
}
}
return ret;
}
}
'JAVA/JSP > Source' 카테고리의 다른 글
메일(첨부자료 3개) 보내기 (0) | 2009.01.29 |
---|---|
PageReader (0) | 2009.01.16 |
Morphemer (0) | 2009.01.16 |
html tag filter(2) (0) | 2009.01.12 |
html tag filter (0) | 2009.01.09 |