첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

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
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요