[C#]判斷中文字並加入分隔符號

[C#]判斷中文字並加入分隔符號

遇到一個需求

我們上傳到主機的檔案,因為主機有自定義的造字區,上傳檔案必須在中文字的開頭加入char(04),並在結尾加入char(07) ,主機才會判定中間文字為中文字,試作結果如下:

程式碼


using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;

namespace TestSplitChi
{
    class Program
    {
        static void Main(string[] args)
        {
            //測試文字
            string CustomName = "妳好abc我好 他";
            //輸出結果
            string resultname = string.Empty;
            int counter = 0;           
            while (counter <= CustomName.Length - 1)
            {
                int chiindex = GetCounter(CustomName, counter);
                //當長度為0視為非中文字
                if (chiindex == 0)
                {
                    resultname += CustomName.Substring(counter, 1);
                    counter++;
                }
                else
                {
                    resultname += Convert.ToChar(04) + CustomName.Substring(counter, chiindex) + Convert.ToChar(07);
                    counter += chiindex;
                }
            }
            ExportData(@"C:\test.txt", resultname);
            Console.Read();
        }
        /// <summary>
        /// 將處理後的結果匯出文字檔.
        /// </summary>
        /// <param name="InFName">Name of the input File Name.</param>
        /// <returns></returns>
        static bool ExportData(string InFName, string inputvalues)
        {
            try
            {
                StreamWriter sw = new StreamWriter(InFName, false, Encoding.GetEncoding("Big5"));
                sw.WriteLine(inputvalues);
                sw.Flush();
                sw.Close();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        /// <summary>
        /// 取得中文字長度
        /// </summary>
        /// <param name="inputString"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        static int GetCounter(string inputString, int index)
        {
            if (CheckChineseString(inputString, index) == false)
            {
                return 0;
            }
            else
            {
                //判斷是否為最後一個字元
                if (index + 1 > inputString.Length - 1)
                {
                    if (CheckChineseString(inputString, index))
                    {
                        return 1;
                    }
                    else
                    {
                        return 0;
                    }
                }
                else
                {
                    return 1 + GetCounter(inputString, ++index);
                }
            }
        }
        //判斷指定字串內的指定位置是否為中文字
        static bool CheckChineseString(string strInputString, int intIndexNumber)
        {
            int intCode = 0;

            //中文範圍(0x4e00 - 0x9fff)轉換成int(intChineseFrom - intChineseEnd)
            int intChineseFrom = Convert.ToInt32("4e00", 16);
            int intChineseEnd = Convert.ToInt32("9fff", 16);
            if (strInputString != "")
            {
                //取得input字串中指定判斷的index字元的unicode碼
                intCode = Char.ConvertToUtf32(strInputString, intIndexNumber);

                if (intCode >= intChineseFrom && intCode <= intChineseEnd)
                {
                    return true;     //如果是範圍內的數值就回傳true
                }
                else
                {
                    return false;    //如果是範圍外的數值就回傳true
                }
            }
            return false;
        }

    }
}

輸出結果

pic1

參考資料

c#字串處理 - 如何判斷字串是否為中文