在c#中是否存在splitByCharacterType方法,就像在Java中一样?

在Java中有一个方法splitByCharacterType ,它接受一个字符串,例如0015j8*(并将其拆分为"0015","j","8","*","(" 。是否有像这样的内置函数在c#中?如果不是,我将如何构建一个函数来执行此操作?

 public static IEnumerable 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","*","("

我建议你实现扩展方法。

我不认为这种方法存在。 您可以按照以下步骤创建自己的实用程序方法:

  1. 创建一个列表来保存拆分字符串
  2. 定义包含所有字符类型的字符串,例如

      string numberString = "0123456789"; string specialChars = "~!@#$%^&*(){}|\/?"; string alphaChars = "abcde....XYZ"; 
  3. 定义一个变量来保存临时字符串
  4. 定义变量以记录字符的类型
  5. 遍历您的字符串,一次一个字符,通过检查预定义类型字符串中char的存在来检查字符的类型。
  6. 如果type是new,而不是前一个类型(检查类型变量值),则将临时字符串(非空)添加到列表中,将新类型分配给type变量并将当前char分配给临时字符串。 否则,将char附加到临时字符串。
  7. 在遍历结束时,将临时字符串(非空)添加到列表中
  8. 现在您的列表包含拆分字符串。
  9. 将列表转换为字符串数组,您就完成了。

您可以使用正则表达式类,如下所示,但您需要添加对数字和字母以外的其他字符的支持。

  var chars = Regex.Matches("0015j8*(", @"((?:""[^""\\]*(?:\\.[^""\\]*)*"")|[az]|\d+)").Cast().Select(match => match.Value).ToArray(); 

结果0015,J,8