하루 한 문법, 그 첫번째 시간입니다
* GetUnicodeCategory
(닷넷에서 문자를 표현하는) Char 구조체에 정의된 static 메서드 입니다
이 메서드는 문자의 범주를 쉽게 알 수 있도록 해 줍니다
범주라는 말이 좀 딱딱하죠? 말 그대로 문자가 어떤 문자에 속하는지 알려 주는 기능이라고 할까요...
1,2,3 .. <- 숫자죠
a,b,c.. <- 영문자죠. 그리고 소문자죠
\a, \t <- 제어 문자죠.. \a: 비프음, \t :탭 문자
이와같이 문자가 어떤 범주에 속하는지 알려 주는 유용한 메서드 입니다
다음과 같이 간단히 사용 할 수 있습니다
static void Main(string[] args)
{
char c = 'A';
Console.WriteLine(Char.GetUnicodeCategory(c)); //결과는 UppercaseLetter 입니다
}
- GetUnicodeCategory 에 대문자 'A'를 입력하니, UppercaseLetter 이라고 결과를 내뱉습니다.
UppercaseLetter 라는 결과는 System.Globalization 네임스페이스에 정의된 UnicodeCategory 라는 enum 값입니다
샘플을 조금 더 확장 해 볼까요?
임의의 문자열이 어떤 문자들로 구성되었는지 알아 보는 예제입니다.
static void Main(string[] args)
{
string str = "1234abcEFG안녕(+=)";
Dictionary<System.Globalization.UnicodeCategory, int> dic =
new Dictionary<System.Globalization.UnicodeCategory, int>();
for (int i = 0; i < str.Length; i++)
{
System.Globalization.UnicodeCategory uc = Char.GetUnicodeCategory(str[i]);
if (dic.ContainsKey(uc))
{
dic[uc]++;
}
else
{
dic.Add(uc, 1);
}
}
System.Collections.IEnumerator e = dic.GetEnumerator();
while (e.MoveNext())
{
Console.WriteLine(e.Current.ToString());
}
}
위 샘플의 결과는 아래와 같습니다

주어진 문자열 '1234abcEFG안녕(+=)' 은
십진수 숫자 4개, 소문자 3개, 대문자3개, 기타문자2개, 여는문자1개, 수학기호2개, 닫는문자1개
라는 것을 알 수 있습니다.
그리고 한가지 더 말씀드리면,
GetUnicodeCategory 메서드가 반환하는 각 범주를 검증할 수 있는 다음과 같은 Boolean 메서드들도 추가로 제공해 주고 있습니다.
Char.IsDigit (10진 숫자 인가?), Char.IsControl(제어문자인가?), Char.IsLower(영소문자인가?) .... 등등
유용하죠 ^^
필요할 때 적절히 사용하세요~~~
= 참고 =
아래 표는 GetUnicodeCategory 메서드의 결과로 반환되는 UnicodeCategory 의 멤버입니다(msdn)
멤버 이름 |
설명 |
ClosePunctuation |
문자가 괄호, 대괄호 및 중괄호처럼 쌍을 이루는 문장 부호의 닫는 문자임을 나타냅니다. 유니코드 지정 "Pe"(punctuation, close)로 지정됩니다. 값은 21입니다. |
ConnectorPunctuation |
문자가 두 문자를 연결하는 연결 문장 부호임을 나타냅니다. 유니코드 지정 "Pc"(punctuation, connector)로 지정됩니다. 값은 18입니다. |
Control |
문자가 유니코드 값이 U+007F이거나 U+0000부터 U+001F까지 또는 U+0080부터 U+009F까지의 범위에 있는 컨트롤 코드임을 나타냅니다. 유니코드 지정 "Cc"(other, control)로 지정됩니다. 값은 14입니다. |
CurrencySymbol |
문자가 통화 기호임을 나타냅니다. 유니코드 지정 "Sc"(symbol, currency)로 지정됩니다. 값은 26입니다. |
DashPunctuation |
문자가 대시 또는 하이픈임을 나타냅니다. 유니코드 지정 "Pd"(punctuation, dash)로 지정됩니다. 값은 19입니다. |
DecimalDigitNumber |
문자가 0부터 9까지의 범위에 있는 10진수임을 나타냅니다. 유니코드 지정 "Nd"(number, decimal digit)로 지정됩니다. 값은 8입니다. |
EnclosingMark |
문자가 기본 문자를 포함한 모든 이전 문자를 둘러싸는 간격이 없는 조합 문자인 묶기 표시임을 나타냅니다. 유니코드 지정 "Me"(mark, enclosing)로 지정됩니다. 값은 7입니다. |
FinalQuotePunctuation |
문자가 닫는 또는 마지막 문장 부호임을 나타냅니다. 유니코드 지정 "Pf"(punctuation, final quote)로 지정됩니다. 값은 23입니다. |
Format |
문자가 대개 렌더링되지 않고 텍스트 레이아웃이나 텍스트 처리 작업에 영향을 주는 서식 문자임을 나타냅니다. 유니코드 지정 "Cf"(other, format)로 지정됩니다. 값은 15입니다. |
InitialQuotePunctuation |
문자가 여는 또는 시작 문장 부호임을 나타냅니다. 유니코드 지정 "Pi"(punctuation, initial quote)로 지정됩니다. 값은 22입니다. |
LetterNumber |
5에 해당하는 로마자 'V'와 같이 문자가 10진수 대신 문자로 나타낸 숫자임을 나타냅니다. 유니코드 지정 "Nl"(number, letter)로 지정됩니다. 값은 9입니다. |
LineSeparator |
문자가 텍스트 행을 구분하는 데 사용됨을 나타냅니다. 유니코드 지정 "Zl"(separator, line)으로 지정됩니다. 값은 12입니다. |
LowercaseLetter |
문자가 소문자임을 나타냅니다. 유니코드 지정 "Ll"(letter, lowercase)로 지정됩니다. 값은 1입니다. |
MathSymbol |
문자가 '+' 또는 '= '과 같은 수학 기호임을 나타냅니다. 유니코드 지정 "Sm"(symbol, math)으로 지정됩니다. 값은 25입니다. |
ModifierLetter |
문자가 이전 문자를 제한하는 간격이 자유로운 문자인 한정자 문자임을 나타냅니다. 유니코드 지정 "Lm"(letter, modifier)으로 지정됩니다. 값은 3입니다. |
ModifierSymbol |
문자가 주위 문자를 제한하는 한정자 기호임을 나타냅니다. 예를 들어 분수 기호는 이 기호의 왼쪽 숫자가 분자이고, 오른쪽 숫자가 분모임을 나타냅니다. 유니코드 지정 "Sk"(symbol, modifier)로 지정됩니다. 값은 27입니다. |
NonSpacingMark |
문자가 기본 문자를 제한하는 간격이 없는 문자임을 나타냅니다. 유니코드 지정 "Mn"(mark, nonspacing)으로 지정됩니다. 값은 5입니다. |
OpenPunctuation |
문자가 괄호, 대괄호 및 중괄호처럼 쌍을 이루는 문장 부호의 여는 문자임을 나타냅니다. 유니코드 지정 "Ps"(punctuation, open)로 지정됩니다. 값은 20입니다. |
OtherLetter |
문자가 대문자, 소문자, 단어의 첫 글자를 대문자로 하는 문자 또는 한정자 문자가 아닌 문자임을 나타냅니다. 유니코드 지정 "Lo"(letter, other)로 지정됩니다. 값은 4입니다. |
OtherNotAssigned |
문자가 어떠한 유니코드 범주에도 할당되지 않음을 나타냅니다. 유니코드 지정 "Cn"(other, not assigned)으로 지정됩니다. 값은 29입니다. |
OtherNumber |
문자가 분수 1/2처럼 10진수나 문자 숫자가 아닌 숫자임을 나타냅니다. 유니코드 지정 "No"(number, other)로 지정됩니다. 값은 10입니다. |
OtherPunctuation |
문자가 연결 문장 부호, 대시 문장 부호, 여는 문장 부호, 닫는 문장 부호, 처음 따옴표 또는 마지막 따옴표가 아닌 문장 부호임을 나타냅니다. 유니코드 지정 "Po"(punctuation, other)로 지정됩니다. 값은 24입니다. |
OtherSymbol |
문자가 수학 기호, 통화 기호 또는 한정자 기호가 아닌 기호임을 나타냅니다. 유니코드 지정 "So"(symbol, other)로 지정됩니다. 값은 28입니다. |
ParagraphSeparator |
문자가 단락을 구분하는 데 사용됨을 나타냅니다. 유니코드 지정 "Zp"(separator, paragraph)로 지정됩니다. 값은 13입니다. |
PrivateUse |
문자가 유니코드 값이 U+E000부터 U+F8FF까지의 범위에 있는 전용 문자임을 나타냅니다. 유니코드 지정 "Co"(other, private use)로 지정됩니다. 값은 17입니다. |
SpaceSeparator |
문자가 문자 모양은 없지만 제어 문자나 서식 문자가 아닌 공백 문자임을 나타냅니다. 유니코드 지정 "Zs"(separator, space)로 지정됩니다. 값은 11입니다. |
SpacingCombiningMark |
문자가 기본 문자를 제한하는 해당 기본 문자의 문자 모양 너비에 영향을 미치는 간격이 있는 문자임을 지정합니다. 유니코드 지정 "Mc"(mark, spacing combining)로 지정됩니다. 값은 6입니다. |
Surrogate |
문자가 상위 서로게이트이거나 하위 서로게이트임을 나타냅니다. 서로게이트 코드 값은 U+D800부터 U+DFFF까지의 범위에 있습니다. 유니코드 지정 "Cs"(other, surrogate)로 지정됩니다. 값은 16입니다. |
TitlecaseLetter |
문자가 단어의 첫 글자를 대문자로 하는 문자임을 나타냅니다. 유니코드 지정 "Lt"(letter, titlecase)로 지정됩니다. 값은 2입니다. |
UppercaseLetter |
문자가 대문자임을 나타냅니다. 유니코드 지정 "Lu"(letter, uppercase)로 지정됩니다. 값은 0입니다. |