본문 바로가기

Spring Framework

[spring][java]비속어,금칙어 정제 후 db저장

jsp에서 controller로 vo던 String형태던 문장(혹은 단어,문단)을 보냈을 때

글 속에 비속어 및 금칙어를 * 로 바꾸는 로직

 

public String wordFilter(String word) throws Exception{
		//이 부분에서 비속어 및 금칙어를 slang이란 변수에 담아준다.
        //db에서 조회해 가져오는 값의 형태는 다음과 같다
        // -> "바보|멍청이|돌아이...."
        //이런식으로 단어 사이에 |(₩+shift) 로 구분을 해줘서 변수에 담는다.
		String slang = boardDAO.getSlangList();
        
        //받아온 값을 확인해본다
		System.out.println("비속어:::: "+slang);
        
        //Pattern과 Matcher는 자바 내장 플러그인 인것 같다.(따로 설정은 안해줌)
		Pattern p = Pattern.compile(slang ,Pattern.CASE_INSENSITIVE); //비속어 세팅
		Matcher m = p.matcher(word); //비교할 문장
		
        //한글자씩 가져와서 걸러내기위해 버퍼 선언(?) 이라고 이해하는중
		StringBuffer sb = new StringBuffer(); 
		while(m.find()) {
        	//Matcher에 있는 문장에서 비속어를 걸러서 *로 바꿔주는 로직
			m.appendReplacement(sb, maskWord(m.group()));
		}
		m.appendTail(sb);
		return sb.toString();
	}
    
    //위 while문에 들어있는 함수
    public static String maskWord(String word) {
		StringBuffer buff  = new StringBuffer();
        //단어를 한글자씩 쪼개서 담는 부분
		char[] ch = word.toCharArray();
		for(int i = 0; i<ch.length; i++) {
        //포문 돌려서 *로 바꿔주는 부분
        //여기서 ㅈ+ㅗ+ㅈ 와 같은 한글자 비속어를 거르기 위해
        //length범위를 조절했다.
			if(i<1) {
				if(word.toCharArray().length<2)
					buff.append("*");
				else
					buff.append(ch[i]);
			}else {
				buff.append("*");
			}
		}
		return buff.toString();
	}
//위에서 만든 함수로 비속어를 *처리 한후 return값을 변수에 담아줘서
String postCon = wordFilter(boardVO.getPostCon());
//vo에 setting 혹은 model로 바로 넘겨도 됨
boardVO.setPostCon(postCon);