Smipple is shutting down Nov 30, 2017. Some features are currently disabled.
Profile image for Shin Hyunjun Mar
Filtering Source
Language
Java
Tags
filtering

Filtering Source

1 import java.util.Scanner; 2 3 public class Filter { 4 5 public static Scanner scanner = new Scanner(System.in); 6 public static String[] dataArray = { "씨*발", "개*새*끼" }; //필터링 단어 배열변수 7 public static int asterisk_length = 5; //애스터리스크가 허용되는 최대 문자열 길이 8 9 public static void main(String[] args) { 10 String text = scanner.nextLine(); 11 System.out.println(filtering(text)); 12 } 13 14 public static String filtering(String text) { 15 for(String data : dataArray) { //필터링 단어 배열 16 if(data.contains("?")) { //?가 포함되어있을때 17 String[] splited = data.split("\\?"); //필터링 단어를 ?를 기준으로 분리 18 int[] firsts = getCharLocation(text, splited[0].charAt(0)); //인자값에서 필터링 단어의 첫번째 글자가 존재하는 위치를 모두 저장 19 for(int i = 0; i < firsts.length; i++) { //배열의 크기만큼 반복 20 int first = firsts[i]; //i번째의 첫번째 글자 위치 21 int last = first; //i번째의 첫번째 글자의 마지막 글자 위치 22 for(int j = 1, k = 2; j < splited.length && first+k < text.length(); j++, k += 2) //j: 반복제어 변수 | k: ?를 제외한 글자의 위치 23 if(text.charAt(first+k)==splited[j].charAt(0)) //인자값에서 first+k 번째의 글자가 필터링 단어의 ?를 제외한 j번째 글자 일경우 24 last += 2; //필터링 단어의 마지막 글자 위치 변수에 2를 더함 25 if(last != first) { //시작 위치와 종료 위치가 다를경우 26 StringBuilder result = new StringBuilder(); 27 for(int j = first; j <= last; j++) //시작 위치부터 종료 위치 까지 반복 j: 현재 글자 위치 28 result.append(text.charAt(j)); //인자값의 j번째 글자를 결과값에 더함 29 System.out.println(result + "은(는) 입력할 수 없습니다."); 30 text = text.replace(result.toString(), change(result.toString(), "*")); //필터링 글자 길이만큼 *로 변환 31 } 32 } 33 }else if(data.contains("*")) { //*이 포함되어있을때 34 String[] splited = data.split("\\*"); //필터링 단어를 *를 기준으로 분리 35 int[] firsts = getCharLocation(text, splited[0].charAt(0)); //인자값에서 필터링 단어의 첫번째 글자가 존재하는 위치를 모두 저장 36 for(int i = 0; i < firsts.length; i++) { 37 int first = firsts[i]; 38 int last = first; 39 for(int j = 1; j <= asterisk_length+1 && first+j < text.length(); j++) 40 if(text.charAt(first+j)==splited[splited.length-1].charAt(0)) 41 last = j; 42 if(last != first) { 43 StringBuilder result = new StringBuilder(); 44 for(int j = first; j <= last; j++) 45 result.append(text.charAt(j)); 46 System.out.println(result + "은(는) 입력할 수 없습니다."); 47 text = text.replace(result.toString(), change(result.toString(), "*")); 48 } 49 } 50 }else text = text.replace(data, change(data, "*")); //필터링 글자 길이만큼 *로 변환 51 } 52 return text; 53 } 54 55 public static int[] getCharLocation(String text, char key) { 56 int[] locations = new int[text.length()]; 57 for(int i = 0, j = 0; i < text.length(); i++) { 58 if(text.charAt(i) == key) { 59 locations[j] = i; 60 j++; 61 } 62 } 63 return locations; 64 } 65 66 public static String change(String text, String changed) { 67 StringBuilder sb = new StringBuilder(); 68 for(int i = 0; i < text.length(); i++) { 69 sb.append(changed); 70 } 71 return sb.toString(); 72 } 73 }

Discussion

asdf

Comments