728x90
반응형
728x170
▶ 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
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 64비트 프로세스 여부 구하기 (0) | 2020.02.02 |
---|---|
[C#/COMMON/.NETCORE] switch 명령문 : 튜플 패턴(Tuple Pattern)에서 when 키워드 사용하기 (0) | 2020.02.01 |
[C#/COMMON/.NETCORE] switch문 : 튜플 패턴(Tuple Pattern) 사용하기 (0) | 2020.02.01 |
[C#/COMMON] ICloneable 인터페이스 : 객체 DEEP COPY 사용하기 (0) | 2020.02.01 |
[C#/COMMON/.NET6] Array 클래스 : Copy 정적 메소드를 사용해 바이트 배열 병합하기 (0) | 2020.01.12 |
[C#/COMMON] CultureInfo 클래스 : yyyy-MM-dd HH:mm:ss 포맷 문자열 전역 설정하기 (0) | 2019.12.26 |
[C#/COMMON] MeasureIt (0) | 2019.11.29 |
[C#/COMMON] CLR Profiler for .NET Framework 4 (0) | 2019.11.29 |
[C#/COMMON] DTC Tester (0) | 2019.11.29 |
[C#/COMMON] clrver.exe 프로그램 (0) | 2019.11.28 |
댓글을 달아 주세요