首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c#中有没有像Java一样的splitByCharacterType方法?

在c#中有没有像Java一样的splitByCharacterType方法?
EN

Stack Overflow用户
提问于 2012-11-25 11:40:04
回答 3查看 411关注 0票数 1

在Java语言中,有一个接受字符串(例如0015j8*( )并将其拆分成"0015","j","8","*","("的方法splitByCharacterType。在c#中有像这样的内置函数吗?如果不是,我该如何构建一个函数来实现这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-25 12:10:55

代码语言:javascript
运行
复制
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();
}

使用方法如下:

代码语言:javascript
运行
复制
string[] split = SplitByCharacterType("0015j8*(").ToArray();

结果是"0015","j","8","*","("

我建议您将其实现为扩展方法。

票数 3
EN

Stack Overflow用户

发布于 2012-11-25 12:00:29

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

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

string numberString = "0123456789";string specialChars = "~!@#$%^&*(){}|\/?";string alphaChars = "abcde....XYZ";

  • 定义一个变量来保存临时字符串

  • 定义一个变量来记录字符的类型

  • 遍历字符串,一次遍历一个字符,通过检查预定义类型字符串中是否存在字符来检查字符的类型。

  • 如果类型比以前的类型新(检查类型变量值),则将临时字符串(不为空)添加到列表中,将新类型分配给类型变量,并将当前字符分配给临时字符串。如果不是这样,则将字符附加到临时字符串。

  • 在遍历的末尾,将临时字符串(不为空)添加到列表

  • ,现在列表中包含了拆分的字符串。

  • 将列表转换为字符串数组即可完成。
票数 2
EN

Stack Overflow用户

发布于 2012-11-25 12:08:18

您可以使用regex类,类似于下面的内容,但您需要添加对除数字和字母之外的其他字符的支持。

代码语言:javascript
运行
复制
   var chars = Regex.Matches("0015j8*(", @"((?:""[^""\\]*(?:\\.[^""\\]*)*"")|[a-z]|\d+)").Cast<Match>().Select(match => match.Value).ToArray(); 

结果0015,J,8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13548048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档