本文为
- 使用正则表达式判断英文字母或数字
- 使用正则表达式判断中文字符串
- 分割中文字符串(续)
- 分割中文字符串
这四篇文章的综合版本,是一个有关中文的实际项目的一部分。要求为将连续的中文字符串,按照以下两个原则分割:
- 每个中文字符后接一个空格;
- 每个英文单词或数后接一个空格;
- 其他符号保留,后接一个空格。
最后得到所需的中文字符串。该程序在VS2005中已经调试实现。
该部分需要使用以下代码,我将逐一讲解。
正则表达式部分有两个方法,分别作为判断中文或英文、数字的方法
RegexChinese方法,判断字符是否为中文 #region RegexChinese方法,判断字符是否为中文
/// <summary>
/// Description:判断字符是否为中文
/// </summary>
/// <param name="c">待判断的字符</param>
/// <returns>是中文的返回ture,否则返回false</returns>
public static bool RegexChinese(char c)
{
if (Regex.IsMatch(c.ToString(), "^[一-龥]+$"))
return true;
else
return false;
}
#endregion
RegexLetterOrDigit方法,判断是否为字母或数字 #region RegexLetterOrDigit方法,判断是否为字母或数字
/// <summary>
/// Description:判断字符是否为英文字母或数字
/// </summary>
/// <param name="c">待判断的字符</param>
/// <returns>是字母或数字的返回ture,否则返回false</returns>
public static bool RegexLetterOrDigit(char c)
{
if (Regex.IsMatch(c.ToString(), @"^[A-Za-z0-9]+$"))
return true;
else
return false;
}
#endregion分割字符串用到以下方法:
BlankString方法,将原始字符串间加入空格 #region BlankString方法,将原始字符串间加入空格
/// <summary>
/// Discription:将原始字符串间加入空格,中文一个字符后一个空格
/// 英文单词或数字整体后一个空格
/// </summary>
/// <param name="oriString">需要分割的字符串</param>
/// <returns>已分割的字符串</returns>
public string BlankString(string oriString)
{
//将原始字符串分割为逐个字符
char[] tempChar = oriString.ToCharArray();
//用于临时保存分割的字符,中文一个字符占一项,英文单词或数字整体占一项
string[] tempString = new string[tempChar.Length];
//作为字符串数组的下标
int num = 0;
//记录数组的大小
int size = 0;
for (int i = 0; i < tempChar.Length; i ++ )
{
//若为汉字,则加入字符串数组中
if (RegexChinese(tempChar[i]))
tempString[num] = tempChar[i].ToString();
//若为字母或数字,则将其合并为一个字符串,加入字符串数组中
else if (RegexLetterOrDigit(tempChar[i]))
{
tempString[i] = ConnectChar(tempChar, i);
//跳过字母或数字的字符
for (int j = i; j < tempChar.Length; j++)
{
if (j < (tempChar.Length - 1) && RegexLetterOrDigit(tempChar[j + 1]))
continue;
else
{
i = j;
break;
}
}
}
//其他字符不变,加入字符串数组中,在以后的程序中处理
else
tempString[num] = tempChar[i].ToString();
num++;
}
//记录含有有效字符串的字符串数组的大小
size = Array.IndexOf(tempString, null);
if(size > 0)
//将数组重新设定大小
Array.Resize(ref tempString, size);
return String.Join(" ",tempString);
}
#endregion
ConnectChar方法,将连续的英文字母或数字连接为单词或数 #region ConnectChar方法,将连续的英文字母或数字连接为单词或数
/// <summary>
/// Discription:将连续的英文字母或数字连接为单词或数
/// </summary>
/// <param name="oriCharArray">未经处理的按字符分割的字符数组</param>
/// <param name="currentNum">英文单词或数的第一个字母或数字的索引</param>
/// <returns>已连接的单词或数</returns>
private string ConnectChar(char[] oriCharArray, int currentNum)
{
//保存英文单词或数字的数组
string[] finalArray = new string[oriCharArray.Length];
//作为字符串数组的下标
int num = 0;
//记录数组的大小
int size = 0;
//检查是否包含连续字母或数字,将其保存在一起
for (int i = currentNum; i < oriCharArray.Length; i++)
{
finalArray[num] = oriCharArray[i].ToString();
if (i < (oriCharArray.Length - 1) && RegexLetterOrDigit(oriCharArray[i + 1]))
{
num++;
continue;
}
else
break;
}
//记录含有有效字符串的字符串数组的大小
size = Array.IndexOf(finalArray,null);
if (size > 0)
//将数组重新设定大小
Array.Resize(ref finalArray, size);
return String.Join("",finalArray);
}
#endregion