한글 유니코드와 관련된 내용은 이 글을 참고하세요: Java 예제: 한글 초성 중성 종성 분리 (자모분리)
만들고자 하는 SQL(mariadb)은 다음과 같습니다.
SELECT `id`, `keyword`, `date`, count(keyword) as kcount FROM `recent_search_keyword` WHERE keyword >= '가' and keyword <= '깋' group by keyword order by keyword
자바(또는 Spring)에서 입력된 키워드를 분석해서 위 SQL의 '가'
와 '깋'
이 부분에 넣을 단어를 추출하는 예제입니다. 위 SQL을 입력하면 가
부터 시작하는 초성이 ㄱ
로 된 모든 단어를 보여줍니다. '가'
대신 'ㄱ'
을 넣어도 정상 동작합니다.
다음과 같은 경우가 있습니다.
- ㄱ를 입력한 경우 범위는 ㄱ … 깋
- 가글을 입력한 경우 범위는 가글 … 가깋
- 삼겹살을 입력한 경우 범위는 삼겹살 … 삼겹싷
- 지나가는ㅁ을 입력한 경우 범위는 지나가는ㅁ … 지나가는밓
package blog; import java.util.Scanner; public class SearchHangeul { public static void main(String[] args) { String text = "가깋낗닣딯띻맇밓빟삫싷잏짛찧칳킿팋핗힣"; String jamoRef = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅇㅈㅉㅊㅋㅌㅍㅎ"; char[] textArr = text.toCharArray(); char[] jamoArr = jamoRef.toCharArray(); try(Scanner s = new Scanner(System.in);) { System.out.print("입력하세요 >> "); String keyword = s.nextLine(); char targetChar = keyword.charAt(keyword.length() - 1); // System.out.println((int) targetChar); char endChar = '0'; // 입력값의 끝 문자가 ㄱ...ㅎ 인 경우 if(targetChar <= 12622) { for(int i = 0; i < jamoArr.length; i++) { if(targetChar == jamoArr[i]) { System.out.println(targetChar + " to the end: " + textArr[i + 1]); endChar = textArr[i + 1]; } } } else { // 입력값의 끝 문자가 가...힣 인 경우 for(int i = 0; i < text.length(); i++) { System.out.println(textArr[i] + " : " + (int) textArr[i]); if(targetChar >= textArr[i] && targetChar < textArr[i + 1]) { System.out.println(targetChar + " to the end: " + textArr[i + 1]); endChar = textArr[i + 1]; } } } // SQL 끝 단어 String endKeyword = keyword.substring(0, keyword.length() - 1) + endChar; String outSql = "SELECT `id`, `keyword`, `date`, count(keyword) as kcount " + "FROM `recent_search_keyword` " + "\n\t\t" + "WHERE keyword >= '{start}' and keyword <= '{end}' " + "group by keyword order by keyword"; outSql = outSql.replace("{start}", keyword).replace("{end}", endKeyword); System.out.println("**final SQL : " + outSql); } } }
아래는 테스트 결과입니다.
0개의 댓글