첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 한글 문자를 초성/중성/종성으로 분리하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


Program.cs

 

 

using System;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        private static void Main()

        {

            Console.Title = "한글 문자를 초성/중성/종성으로 분리하기";

 

            Console.WriteLine($"강동구 : {HangulHelper.IsHangul("강동구")}");

            Console.WriteLine($"강동A  : {HangulHelper.IsHangul("강동A" )}");

            Console.WriteLine($"강     : {HangulHelper.IsHangul('강'    )}");

            Console.WriteLine($"A      : {HangulHelper.IsHangul('A'     )}");

 

            Console.WriteLine();

 

            char[] elementArray = HangulHelper.DivideHangul('강');

 

            if(elementArray.Length == 3)

            {

                Console.WriteLine($"초성 : {elementArray[0]}");

                Console.WriteLine($"중성 : {elementArray[1]}");

                Console.WriteLine($"종성 : {elementArray[2]}");

            }

            else if(elementArray.Length == 2)

            {

                Console.WriteLine($"초성 : {elementArray[0]}");

                Console.WriteLine($"중성 : {elementArray[1]}");

            }

 

            Console.WriteLine();

 

            elementArray = HangulHelper.DivideHangul('노');

 

            if(elementArray.Length == 3)

            {

                Console.WriteLine($"초성 : {elementArray[0]}");

                Console.WriteLine($"중성 : {elementArray[1]}");

                Console.WriteLine($"종성 : {elementArray[2]}");

            }

            else if(elementArray.Length == 2)

            {

                Console.WriteLine($"초성 : {elementArray[0]}");

                Console.WriteLine($"중성 : {elementArray[1]}");

            }

        }

 

        #endregion

    }

}

 

 

HangulHelper.cs

 

 

namespace TestProject

{

    /// <summary>

    /// 한글 헬퍼

    /// </summary>

    public class HangulHelper

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 초성 수

        /// </summary>

        private const int INITIAL_COUNT = 19;

 

        /// <summary>

        /// 중성 수

        /// </summary>

        private const int MEDIAL_COUNT = 21;

 

        /// <summary>

        /// 종성 수

        /// </summary>

        private const int FINAL_COUNT = 28;

 

        /// <summary>

        /// 한글 유니코드 시작 인덱스

        /// </summary>

        private const int HANGUL_UNICODE_START_INDEX = 0xac00;

 

        /// <summary>

        /// 한글 유니코드 종료 인덱스

        /// </summary>

        private const int HANGUL_UNICODE_END_INDEX = 0xD7A3;

 

        /// <summary>

        /// 초성 시작 인덱스

        /// </summary>

        private const int INITIAL_START_INDEX = 0x1100;

 

        /// <summary>

        /// 중성 시작 인덱스

        /// </summary>

        private const int MEDIAL_START_INDEX = 0x1161;

 

        /// <summary>

        /// 종성 시작 인덱스

        /// </summary>

        private const int FINAL_START_INDEX = 0x11a7;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 한글 여부 구하기 - IsHangul(char source)

 

        /// <summary>

        /// 한글 여부 구하기

        /// </summary>

        /// <param name="source">소스 문자</param>

        /// <returns>한글 여부</returns>

        public static bool IsHangul(char source)

        {

            if(HANGUL_UNICODE_START_INDEX <= source && source <= HANGUL_UNICODE_END_INDEX)

            {

                return true;

            }

 

            return false;

        }

 

        #endregion

        #region 한글 여부 구하기 - IsHangul(string source)

 

        /// <summary>

        /// 한글 여부 구하기

        /// </summary>

        /// <param name="source">소스 문자열</param>

        /// <returns>한글 여부</returns>

        public static bool IsHangul(string source)

        {

            bool result = false;

 

            for(int i = 0; i < source.Length; i++)

            {

                if(HANGUL_UNICODE_START_INDEX <= source[i] && source[i] <= HANGUL_UNICODE_END_INDEX)

                {

                    result = true;

                }

                else

                {

                    result = false;

 

                    break;

                }

            }

 

            return result;

        }

 

        #endregion

        #region 한글 나누기 - DivideHangul(source)

 

        /// <summary>

        /// 한글 나누기

        /// </summary>

        /// <param name="source">소스 한글 문자</param>

        /// <returns>분리된 자소 배열</returns>

        public static char[] DivideHangul(char source)

        {

            char[] elementArray = null;

 

            if(IsHangul(source))

            {

                int index = source - HANGUL_UNICODE_START_INDEX;

 

                int initial = INITIAL_START_INDEX +  index / (MEDIAL_COUNT * FINAL_COUNT);

                int medial  = MEDIAL_START_INDEX  + (index % (MEDIAL_COUNT * FINAL_COUNT)) / FINAL_COUNT;

                int final   = FINAL_START_INDEX   +  index % FINAL_COUNT;

 

                if(final == 4519)

                {

                    elementArray = new char[2];

 

                    elementArray[0] = (char)initial;

                    elementArray[1] = (char)medial;

                }

                else

                {

                    elementArray = new char[3];

 

                    elementArray[0] = (char)initial;

                    elementArray[1] = (char)medial;

                    elementArray[2] = (char)final;

                }

            }

 

            return elementArray;

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요