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;

int jong, jung,cho;

String word = "홍길동";
for( int i = 0 ; i < word.length ; i++ ) {
value = word.subSequence( i, i+1 ).hashCode() - 0xAC00;
jong = value % 28;
jung = ( ( value - jong ) / 28 ) % 21;
cho = ( int )( ( ( value - jong ) / 28 ) / 21 );
}



출처 - http://chess72.tistory.com/193






한글 완전 분해하기(초성,중성,종성)


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();
    }

 

 

이렇게 하면 한글 추출이 완료 되지요~~



출처 - http://blog.naver.com/PostView.nhn?blogId=sinsu2&logNo=120158103842






Posted by linuxism
,