在Java语言中,有一个接受字符串(例如0015j8*( )并将其拆分成"0015","j","8","*","("的方法splitByCharacterType。在c#中有像这样的内置函数吗?如果不是,我该如何构建一个函数来实现这一点呢?
发布于 2012-11-25 12:10:55
public static IEnumerable<string> SplitByCharacterType(string input)
{
if (String.IsNullOrEmpty(input))
throw new ArgumentNullException(nameof(input));
StringBuilder segment = new StringBuilder();
segment.Append(input[0]);
var current = Char.GetUnicodeCategory(input[0]);
for (int i = 1; i < input.Length; i++)
{
var next = Char.GetUnicodeCategory(input[i]);
if (next == current)
{
segment.Append(input[i]);
}
else
{
yield return segment.ToString();
segment.Clear();
segment.Append(input[i]);
current = next;
}
}
yield return segment.ToString();
}使用方法如下:
string[] split = SplitByCharacterType("0015j8*(").ToArray();结果是"0015","j","8","*","("
我建议您将其实现为扩展方法。
发布于 2012-11-25 12:00:29
我不认为这样的方法存在。您可以按照以下步骤创建自己的实用方法:
string numberString = "0123456789";string specialChars = "~!@#$%^&*(){}|\/?";string alphaChars = "abcde....XYZ";
发布于 2012-11-25 12:08:18
您可以使用regex类,类似于下面的内容,但您需要添加对除数字和字母之外的其他字符的支持。
var chars = Regex.Matches("0015j8*(", @"((?:""[^""\\]*(?:\\.[^""\\]*)*"")|[a-z]|\d+)").Cast<Match>().Select(match => match.Value).ToArray(); 结果0015,J,8
https://stackoverflow.com/questions/13548048
复制相似问题