File name
Commit message
Commit date
2024-11-14
File name
Commit message
Commit date
2024-11-14
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-11-14
File name
Commit message
Commit date
2024-11-14
2024-09-10
2024-11-14
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-11-14
2024-11-14
package itn.let.mjo.spammsg.web;
import java.util.List;
import itn.let.hangulparser.HangulParser;
public class ComGetSpamStringParser {
/**
* @methodName : getSpamTextParse
* @author : 이호영
* @date : 2024.11.13
* @description : 리펙토링
* 원본 : ComGetSpamStringParser_advc_backup_20241113.java
* @param strString
* @return
* @throws Exception
*/
public static String getSpamTextParse(String strString) throws Exception {
String smsTxt = strString;
String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); // 한글, 영문, 숫자 이외의 문자는 제거
String[] split = repSmsTxt.split(" ");
StringBuilder reMakeStringText = new StringBuilder();
try {
for (String txt : split) {
txt = processCharacters(txt);
reMakeStringText.append(" ").append(txt);
}
// 분리된 자/모음을 합쳐 최종 문자열 생성
List<String> jasoList = HangulParser.disassemble(reMakeStringText.toString());
String assembleStr = HangulParser.assemble(jasoList);
return assembleStr;
} catch (Exception e) {
System.out.println("++++++++++ getSpamTextParse Error !!! " + e);
return "getSpamTextParse 오류가 발생하였습니다.";
}
}
// 한 단어 내 각 문자에 대한 처리 로직
private static String processCharacters(String txt) throws Exception {
StringBuilder processedText = new StringBuilder(txt);
for (int i = 0; i < txt.length(); i++) {
char currentChar = txt.charAt(i);
if (isKorean(currentChar)) continue;
String tmpStr = Character.toString(currentChar);
// 자음, 영문, 숫자, 특수문자 각각에 대한 처리
if (isKoreanConsonant(tmpStr)) {
txt = handleConsonant(txt, tmpStr, i);
} else if (isEnglish(tmpStr)) {
txt = handleEnglish(txt, tmpStr, i);
} else if (isNumber(tmpStr)) {
txt = handleNumber(txt, tmpStr, i);
} else {
txt = handleSpecialCharacter(txt, tmpStr);
}
}
return processedText.toString();
}
// 자음 처리 로직
private static String handleConsonant(String txt, String tmpStr, int index) throws Exception {
if (index == txt.length() - 1) return txt;
String nextCharAt = Character.toString(txt.charAt(index + 1));
if (isEnglish(nextCharAt)) {
String repCharAt = getEngToHanglue(nextCharAt);
txt = txt.replace(tmpStr + nextCharAt, tmpStr + repCharAt);
}
return txt;
}
// 영문 처리 로직
private static String handleEnglish(String txt, String engStr, int index) {
if (index < txt.length() - 1 && index > 0) {
char nextChar = txt.charAt(index + 1);
char previousChar = txt.charAt(index - 1);
if (isKorean(previousChar) && isKorean(nextChar)) {
txt = txt.replace(engStr, engStr.equalsIgnoreCase("b") ? "비" : "");
}
} else if (index > 0 && isKorean(txt.charAt(index - 1))) {
txt = txt.replace(engStr, "");
}
return txt;
}
// 숫자 처리 로직
private static String handleNumber(String txt, String tmpStr, int index) throws Exception {
if (index == 0) return txt;
String previousStr = Character.toString(txt.charAt(index - 1));
if (isKoreanConsonant(previousStr)) {
String numToStr = getNumberToString(tmpStr);
txt = txt.replace(previousStr + tmpStr, previousStr + numToStr);
}
return txt;
}
// 특수문자 처리 로직
private static String handleSpecialCharacter(String txt, String tmpStr) throws Exception {
String repSpcStr = getRepSpacialString(tmpStr);
if (!repSpcStr.isEmpty()) {
txt = txt.replace(tmpStr, repSpcStr);
}
return txt;
}
// 문자 유형 판별 메서드
private static boolean isKorean(char ch) {
return ch >= 0xAC00;
}
private static boolean isKoreanConsonant(String str) {
return str.matches(".*[ㄱ-ㅎ]+.*");
}
private static boolean isEnglish(String str) {
return str.matches(".*[a-zA-Z]+.*");
}
private static boolean isNumber(String str) {
return str.matches(".*[0-9]+.*");
}
/*
*
* 한글과 유사한 영문자를 변환 처리함
*
* */
public static String getEngToHanglue(String strWord) throws Exception {
String returnStr = "";
try {
if(strWord.toLowerCase().equals("r")) {
returnStr = "ㅏ";
}else if(strWord.toLowerCase().equals("h")) {
returnStr = "ㅐ";
}else if(strWord.toLowerCase().equals("i") || strWord.toLowerCase().equals("I") || strWord.toLowerCase().equals("l")) {
returnStr = "ㅣ";
}
} catch (Exception e) {
System.out.println("++++++++++++++ getEngToHanglue Error !!! "+e);
}
return returnStr;
}
/*
*
* 한글과 유사한 숫자를 변환처리함
*
* */
public static String getNumberToString(String strWord) throws Exception {
String returnStr = "";
try {
if(strWord.equals("1")) {
returnStr = "ㅣ";
}
} catch (Exception e) {
System.out.println("++++++++++++++ getNumberToString Error !!! "+e);
}
return returnStr;
}
/*
*
* 한글과 유사한 특수문자들 변환처리함
*
* */
public static String getRepSpacialString(String strWord) throws Exception{
String returnStr = "";
try {
if(strWord.equals("ⓒ")) {
returnStr = "c";
}else if(strWord.equals("β")) {
returnStr = "비";
}else if(strWord.equals("⒪")) {
returnStr = "ㅇ";
}else if(strWord.equals("㈄")) {
returnStr = "ㅁ";
}else if(strWord.equals("①")) {
returnStr = "ㅣ";
}
} catch (Exception e) {
System.out.println("++++++++++++++ getRepSpacialString Error !!! "+e);
}
return returnStr;
}
}