1. 초성은 19자로 
ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ,
ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ
2. 중성은 21자로
ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅗ, ㅘ,
ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ,
ㅣ
3. 종성은 27자로
ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, 
ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ, 
ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ
< 규칙1>
1.중성이 바뀌는 경우 코드값 차이 : 28
2.초성이 바뀌는 경우 코드값 차이 : 588(21*28)
3. 한글에 대한 첫 코드값('가'의 코드값): 44032
<응용>
가 - 44032
까 - 44620
나 - 45208
다 - 45796
따 - 46384
라 - 46972
마 - 47560
바 - 48148
빠 - 48736
사 - 49324
싸 - 49912
아 - 50500
자 - 51088
짜 - 51676
차 - 52264
카 - 52852
타 - 53440
파 - 54028
하 - 54616
초성: 글자의 코드에서 44032를 빼고, 21*28로 나눈 몫 0 ~ 18
중성: 글자의 코드에서 44032를 빼고, 21*28로 나눈 나머지를 다시 28로 나눈 몫 0 ~ 20
종성: 글자의 코드에서 44032를 빼고, 21*28로 나눈 나머지를 다시 28로 나눈 나머지 0 ~ 27
package bean;
import java.sql.*;
import java.util.*;
public class Select_Entry{
    
        private DBConnectionMgr pool=null;
         public Select_Entry(){
             try{
             pool = DBConnectionMgr.getInstance();
             }catch(Exception e){
              System.out.println("Error : JDBC드라이버 로딩실패");
             }
       
         }
                 
         
//한글에서 초성 뽑아내는 함수
 public String Direct(String name){
        char b =name.charAt(0);
        String chosung = null;
        int first = (b - 44032 ) / ( 21 * 28 );
         switch(first){
             case 0:
             case 1:
                 chosung="ㄱ";
                 break;
             case 2:
                 chosung="ㄴ";
                 break;
             case 3:
             case 4:
                 chosung="ㄷ";
                 break;
             case 5:
                 chosung="ㄹ";
                 break;
             case 6:
                 chosung="ㅁ";
                 break;
             case 7:
             case 8:
                 chosung="ㅂ";
                 break;
             case 9:
             case 10:
                 chosung="ㅅ";
                 break;
             case 11:
                 chosung="ㅇ";
                 break;
             case 12:
             case 13:
                 chosung="ㅈ";
                 break;
             case 14:
                 chosung="ㅊ";
                 break;
             case 15:
                 chosung="ㅋ";
                 break;
             case 16:
                 chosung="ㅌ";
                 break;
             case 17:
                 chosung="ㅍ";
                 break;
             case 18:
                 chosung="ㅎ";
                 break;
           
         }     
     
      return chosung;
 }
 
 
         //회사이름  검색하는 함수(직접검색과 초성검색시 호출)
         public Vector Search_name(int type,String name){
                 
                 Vector pass = new Vector();
                Connection con=null;
                Statement pstmt=null;
                PreparedStatement pstmt1=null;
                ResultSet rs=null;
                String sql="";
                String b=Direct(name);
                
                try{
                        con=pool.getConnection();                      
                   if(type==3){//초성검색의 경우
                     sql="select * from company where search='"+b+"'order by binary(company_name)";
                           }
                   else if(type==2){//직접검색의 경우
                      sql="select * from (select * from company where search='"+b+"'order by company_name )aa where aa.company_name like '"+name+"%'";
                   }
                        pstmt=con.createStatement();
                        rs=pstmt.executeQuery(sql);
                    while(rs.next()) {
                        Company list = new Company();
                        list.setJ_address(rs.getString("j_address"));
                        list.setCompany_name(rs.getString("company_name"));
                        list.setJ_tele(rs.getString("j_tele"));
                        pass.addElement(list);    
                         }//while        
                }catch(Exception e){
                    e.printStackTrace();
                }finally{
                     pool.freeConnection(con,pstmt,rs);
                    
                }                 
             return pass;         
         }
         
//        회사 등록함수(직접검색과 초성검색시 호출)
         public Vector Insert_Company(Company com){
                 
                 Vector pass = new Vector();
                Connection con=null;
                PreparedStatement pstmt=null;
                ResultSet rs=null;
                String sql="";
                String chosung=Direct(com.getCompany_name());                
                
                try{
                    
                   con=pool.getConnection();                      
                  
                   sql="insert into company values(auto_no.nextval,?,?,?,?,?,?)";
                        pstmt=con.prepareStatement(sql);
                        pstmt.setString(1, com.getCompany_name());
                        pstmt.setString(2, com.getCompany_number());
                        pstmt.setString(3, com.getJ_address());
                        pstmt.setString(4, com.getJ_tele());
                        pstmt.setString(5, com.getJ_fax());
                        pstmt.setString(6, chosung);
                        rs=pstmt.executeQuery();
                    while(rs.next()) {
                        Company list = new Company();
                        list.setJ_address(rs.getString("j_address"));
                        list.setCompany_name(rs.getString("company_name"));
                        list.setJ_tele(rs.getString("j_tele"));
                        pass.addElement(list);    
                         }//while        
                }catch(Exception e){
                    e.printStackTrace();
                }finally{
                     pool.freeConnection(con,pstmt,rs);
                    
                }                 
             return pass;         
         }
         
        public String[] Login_info(String id){
            String[] info=new String[2];
            Connection conn=null;
            PreparedStatement pstmt =null;
            ResultSet rs = null;
            String sql=null;
            try { 
                 conn=pool.getConnection();
                 sql="select * from user_info where id=?";
                 pstmt=conn.prepareStatement(sql);
                 pstmt.setString(1,id);
                 rs=pstmt.executeQuery();
                 while(rs.next()){
                   info[0]=rs.getString("name");
                   info[1]=Integer.toString(rs.getInt("gaip_mode"));     
                 }
                
              
            }catch(Exception ex){
                 System.out.println("Exception"+ex);
             }finally{
                 pool.freeConnection(conn,pstmt,rs);
             }
            return info;
        }
}
출처:http://blog.naver.com/PostView.nhn?blogId=jincyber09&logNo=80100554626
/*간단한 예제*/
int value = 0;
출처 - http://chess72.tistory.com/193
한글 완전 분해하기(초성,중성,종성)
[출처] [java/jsp]한글 완전 분해하기(초성,중성,종성)|작성자 신수
import java.io.*;
public class Hangul  {  
     
    /**  
     * 초성  
     */  
    private static final char[] firstSounds = {  
        'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ',  
        'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ',  
        'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'  
    };
  //한글 중성
    private static final char[] middleSounds = {'ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 
        'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ',
        'ㅢ', 'ㅣ'};
    //한글 종성
    private static final char[] lastSounds = {' ', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 
        'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ',
        'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'};
     
     
    /**  
     * 문자 하나가 한글인지 검사  
     *  
     * @param c 검사 하고자 하는 문자  
     * @return 한글 여부에 따라 'true' or 'false'  
     */  
    public static boolean isHangul(char c) {  
        if( c < 0xAC00 || c > 0xD7A3 )  
            return false;  
        return true;  
    }  
     
    /**  
     * 문자열이 한글인지 검사  
     *  
     * @param str 검사 하고자 하는 문자열  
     * @return 한글 여부에 따라 'true' or 'false'  
     */  
    public static boolean isHangul(String str) {  
        if( str == null )  
            return false;  
         
        int len = str.length();  
        if( len == 0 )  
            return false;  
         
        for( int i = 0; i < len; i++ ) {  
            if( ! isHangul(str.charAt(i)) )  
                return false;  
        }  
        return true;  
    }  
     
    /**  
     * 한글 문자의 마지막 문자의 종성 코드값을 추출  
     *  
     * @param c 추출 하고자 하는 문자  
     * @return 존재하지 않으면 '0', 존재하면 코드값 (한글이 아닐때 '-1')  
     */  
    public static int getLastElementCode(char c) {  
        if( ! isHangul(c) )  
            return -1;  
        return (c - 0xAC00) % 28;  
    }  
     
    /**  
     * 한글 문자열의 마지막 문자의 종성 코드값을 추출  
     *  
     * @param str 추출 하고자 하는 문자열  
     * @return 존재하지 않으면 '0', 존재하면 코드값 (한글이 아닐때 '-1')  
     */  
    public static int getLastElementCode(String str) {  
        if( str == null )  
            return -1;  
         
        int len = str.length();  
        if( len == 0 )  
            return -1;  
         
        return getLastElementCode(str.charAt(len - 1));  
    }  
     
    /**  
     * 마지막 한글 문자의 종성이 존제하는 검사  
     *  
     * @param c 검사 하고자 하는 문자  
     * @return 존재하지 않으면 'false', 존재하면 'true'  
     */  
    public static boolean hasLastElement(char c) {  
        if( getLastElementCode(c) > 0 )  
            return true;  
        return false;  
    }  
     
    /**  
     * 한글 만자열의 마지막 문자의 종성이 존제하는 검사  
     *  
     * @param str 검사 하고자 하는 문자열  
     * @return 존재하지 않으면 'false', 존재하면 'true'  
     */  
    public static boolean hasLastElement(String str) {  
        if( str == null )  
            return false;  
         
        int len = str.length();  
        if( len == 0 )  
            return false;  
         
        return hasLastElement(str.charAt(len - 1));  
    }  
     
     
    /**  
     * 한글 문자의 초성을 추출  
     *  
     * @param c 첫번째 문자의 요소를 추출할 문자열  
     * @return 한글 문자의 초성  
     */  
    public static char getFirstElement(char c) {  
        if( ! isHangul(c) )  
            return c;  
        return firstSounds[(c - 0xAC00) / (21 * 28)];  
    }  
     
    /**  
     * 문자열의 첫번째 요소를 추출 (한글일 경우 초성을 추출)  
     *  
     * @param str 첫번째 문자의 요소를 추출할 문자열  
     * @return 첫번째 요소 (한글일 경우 첫번째 문자의 자음)  
     */  
    public static char getFirstElement(String str) {  
        if( str == null )  
            return '\u0000';  
         
        int len = str.length();  
        if( len == 0 )  
            return '\u0000';  
         
        return getFirstElement(str.charAt(0));  
    }  
     
    /**  
     * 문자열을 'euc-kr' 로 인코딩.  
     *  
     * @param str 인코딩할 문자열  
     * @return 인코딩된 문자열  
     */  
    public static String convertCharset(String str) {  
        try {  
            if( str == null )  
                return null;  
            return new String(str.getBytes("8859_1"), "euc-kr");  
        }  
        catch(UnsupportedEncodingException _ex) {  
            return "Encoding Error";  
        }  
    }
    /**
    *한글 한 글자(char)를 받아 초성, 중성, 종성의 위치를 int[]로 반환 한다.
    *@param char : 한글 한 글자
    *@return int[] : 한글 초, 중, 종성의 위치( ex:가 0,0,0 )
    */
    public static int[] split(char c){
        int sub[] = new int[3];
        sub[0] = (c - 0xAC00) / (21*28); //초성의 위치
        sub[1] = ((c - 0xAC00) % (21*28)) / 28; //중성의 위치
        sub[2] = (c -0xAC00) % (28);//종성의 위치
        return sub;
    }
    /**
    *한글 한 글자를 구성 할 초성, 중성, 종성을 받아 조합 후 char[]로 반환 한다.
    *@param int[] : 한글 초, 중, 종성의 위치( ex:가 0,0,0 )
    *@return char[] : 한글 한 글자
    */
    public static char[] combine(int[] sub){
        char[] ch = new char[1];
        ch[0] = (char) (0xAC00 + (sub[0]*21*28) + (sub[1]*28) + sub[2]);
        return ch;
    }
    
    /**
    *한글 초,중,종성 분리/조합 테스트 메소드
    */
    public static void doSomething(){
        int[] x = null;
        String str = "그래도 살만한 세상이다. 아?? 구랗쥐 구람";
        int loop =  str.length();
        char c;
        System.out.println( "============한글 분리============" );
        for( int i = 0; i < loop; i++ ){
            c = str.charAt( i );
            if( c >= 0xAC00 ){
                x = split( c );
                System.out.println( str.substring( i, i+1) + " : 초=" + firstSounds[x[0]] 
                        + "t중="+middleSounds[x[1]]
                        + "t종="+lastSounds[x[2]] );
            }else{
                System.out.println( str.substring( i, i+1) );
            }
        }
        System.out.println( "rn============한글 조합============" );
        System.out.println( "0,0,0 : " +
                    new String( combine( new int[]{0,0,0} ) ) );
        System.out.println( "2,0,0 : " + 
                    new String( combine( new int[]{2,0,0} ) ) );
        System.out.println( "3,0,0 : " + 
                    new String( combine( new int[]{3,0,0} ) ) );
        System.out.println( "11,11,12 : " + 
                    new String( combine( new int[]{11,11,10} ) ) );
        System.out.println( "10,11,12 : " + 
                    new String( combine( new int[]{10,11,14} ) ) );
    }
 public static void main(String[] args) {  
        if( args.length == 0 ) {  
            System.err.println("java util.Hangul <문자열>"); 
   args = new String[1];
   args[0]="테스트";
            //System.exit(0);  
        }  
        Hangul h = new Hangul(); 
        System.out.println(  
        "getFirstElement(String): " + h.getFirstElement(args[0])  
        );  
        System.out.println(  
        "getLastElementCode(String): " + h.getLastElementCode(args[0])  
        );  
        System.out.println(  
        "hasLastElement(String): " + h.hasLastElement(args[0])  
        );  
        System.out.println(  
        "isHangul(String): " + h.isHangul(args[0])  
        );  
  h.doSomething();
    }
}
이렇게 하면 한글 추출이 완료 되지요~~
[출처] [java/jsp]한글 완전 분해하기(초성,중성,종성)|작성자 신수
출처 - http://blog.naver.com/PostView.nhn?blogId=sinsu2&logNo=120158103842
'Development > Java' 카테고리의 다른 글
| java - 화폐 원 단위 콤마 표시 (2) | 2013.10.02 | 
|---|---|
| java - apache POI 소개 (0) | 2013.09.26 | 
| java - 한글 인코딩 유니코드 (0) | 2013.08.30 | 
| java - 객체 직렬화(Object Serialization) (0) | 2013.08.10 | 
| rmi - Hessian Web Service Protocol – Hello World Example (0) | 2013.08.09 | 




