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 |