[C#] 문자열 관련 함수 라이브러리

C# 숫자를 한글로 변환, 문자열을 정수로 변환, 문자열안 리턴값 추출, 한글문자열 길이 등 문자열 함수


숫자를 한글 문자열로 변환
/// <summary>
/// 아라비안 숫자를 한글 문자열로 변환
/// </summary>
/// <param name="num">변환할 숫자값(123)</param>
/// <returns>반환될 문자열(일백이십삼)</returns>
public string TransNum2Han(long num)
{

    string[] han = new string[] { "", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" };
    string[] unit = new string[] { "천", "백", "십", "" };
    string[] unit2 = new string[] { "", "만", "억", "조" };


    string result = num.ToString();
    if (result.Length > 16)
        return "금액이 너무 많습니다.";

    // 네자리마다 단위수2(만,억,조)가 바뀌고 네자리마다 단위수1(천,백,십)이 바뀌므로 네자리씩 나눈다.
    ArrayList spilt = new ArrayList();

    for (int i = 0; result.Length > 0; i++)
    {

        int spiltLength;

        if (result.Length > 4) { spiltLength = 4; }
        else { spiltLength = result.Length; }

        spilt.Add(result.Substring(result.Length - spiltLength, spiltLength));
        result = result.Substring(0, result.Length - spiltLength);
    }

    for (int i = 0; i < spilt.Count; i++)
    {

        string str = (string)spilt[i];

        // 네자리씩 나눌때 네자리가 되지않으면 원만한 처리를 위해서 '0'을 채워 네자리로 만든다.
        if (str.Length < 4) str = str.PadLeft(4, '0');
        if (Int32.Parse(str) != 0) result = unit2[i] + result;

        // 네자리로 나뉜값을 '천','백','십'단위를 구분하는 루틴

        for (int j = 3; j >= 0; j--)
        {
            string unitFlag = unit[j];

            if (str.Substring(j, 1) == "0") unitFlag = "";
            result = han[Int32.Parse(str.Substring(j, 1))] + unitFlag + result;
        }
    }

    return " 一金." + result + "원整.";
}
문자열 타입을 정수형으로 변환
/// <summary>
/// 문자열을 정수로 변경(1~9자리)
/// 문자열내에 ,가 있는 경우 삭제함
/// </summary>
/// <param name="sInteger">정수형 문자열('4,512')</param>
/// <returns>정수(4512)</returns>
public int Str2Int(string sInteger)
{
    int nResult = 0;
    if(sInteger == null)
        return nResult;

    sInteger = sInteger.Replace(",","");
    if (Empty(sInteger))
        return nResult;
    try
    {
       
        string[] sNum = sInteger.Split('.');
        nResult = Int32.Parse(sNum[0]);
    }
    catch (Exception)
    {
        nResult = 0;
    }

    return nResult;
}
문자열 안에 리턴값 개수 추출
/// <summary>
/// 문자열 안의 캐리지 리턴 개수 반환
/// </summary>
/// <param name="sString">분석할 문자열</param>
/// <returns>라인 개수</returns>
public ArrayList LineInMemoChk(string sString)
{
    int nPos = 1;
    int nOldPos = 0;

    ArrayList alStrings = new ArrayList();

    if (sString.Trim() == "")
        return null;

    while (nPos > 0)
    {
        nPos = sString.IndexOf("\r\n", nPos);
        if (nPos > 0)
        {

            if (nPos == 1)
                alStrings.Add(sString.Substring(nOldPos, nPos));
            else
                alStrings.Add(sString.Substring(nOldPos, nPos - nOldPos));

            nOldPos = nPos += 2;
        }
        else
            alStrings.Add(sString.Substring(nOldPos, sString.Length - nOldPos));
    }

    return alStrings;
}



문자열을 특정 포맷으로 변환
/// <summary>
/// 문자열을 특정한 포맷으로 설정
/// </summary>
/// <param name="sData">문자열</param>
/// <param name="sSpec">포맷</param>
/// <returns>포맷으로 설정된 문자열</returns>
/// <example> StrFormat("ABCDEFGHIJKL", "999-99/9999~999") => ABC-DE/FGHI~JKL</example>
public string StrFormat(string sData, string sSpec)
{
    int nDataCnt, nSpecCnt;
    StringBuilder tempRet = new StringBuilder();

    nSpecCnt = nDataCnt = 0;

    while (true)
    {
        if ((nSpecCnt >= sSpec.Length) || (nDataCnt >= sData.Length))
            return tempRet.ToString();

        if (sSpec.Substring(nSpecCnt, 1) == "9")
        {
            tempRet.Append(sData.Substring(nDataCnt, 1));
            nSpecCnt++;
            nDataCnt++;
        }
        else
        {
            tempRet.Append(sSpec.Substring(nSpecCnt, 1));
            nSpecCnt++;
        }
    }
}
한글포함 문자열 길이 계산 함수
/// <summary>
      /// 문자열의 길이를 리턴
      /// 한글은 2byte로 계산됨.
      /// </summary>
      /// <param name="sString">문자열</param>
      /// <returns>길이</returns>
      public int Length(string sString)
      {
          int nLength = 0;
          int nUnicodeHangulStart = 0xac00;
          int nUnicodeHangulEnd = 0xD7A3;

          for (int nLoopI = 0; nLoopI < sString.Length; nLoopI++)
          {
              char Hangul = sString[nLoopI];
              if (nUnicodeHangulStart <= Hangul && Hangul <= nUnicodeHangulEnd)
                  nLength += 2;
              else
                  nLength += 1;
          }
          return nLength;
      }
문자열 잘라내기 함수
/// <summary>
      /// 문자열을 잘라옴. 잘리는 끝이 한글의 중간일 경우 1byte더 짧게 끊는다.
      /// 시작위치가 한글의 중간일 경우 1byte 이전부터 시작한다.
      /// </summary>
      /// <param name="sString">문자열</param>
      /// <param name="nStart">시작위치(0 Base)</param>
      /// <param name="nCnt">자를 문자수</param>
      /// <returns>잘린 문자열</returns>
      public string Substring(string sString, int nStart, int nCnt)
      {

          int nPos = 0;
          int nUnicodeHangulStart = 0xac00;
          int nUnicodeHangulEnd = 0xD7A3;
          StringBuilder sResult = new StringBuilder("");

          for (int nLoopI = 0; nLoopI < sString.Length; nLoopI++)
          {
              char Hangul = sString[nLoopI];

              if (nUnicodeHangulStart <= Hangul && Hangul <= nUnicodeHangulEnd)
                  nPos += 2;
              else
                  nPos += 1;

              if (nPos > nStart && nPos <= nStart + nCnt)
              {
                  sResult.Append(sString.Substring(nLoopI, 1));
              }
          }
          return sResult.ToString();
      }

댓글 남기기