[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;
}
}
}
輸出結果
參考資料