首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在特定字符或最大长度之后拆分字符串

在特定字符或最大长度之后拆分字符串
EN

Stack Overflow用户
提问于 2014-06-23 14:13:52
回答 2查看 1.4K关注 0票数 2

我想用以下方式拆分一个字符串:

代码语言:javascript
复制
string s = "012345678x0123x01234567890123456789";
s.SplitString("x",10);

分拆成

代码语言:javascript
复制
012345678
x0123
x012345678
9012345678
9

例如,输入字符串应该在字符"x“或长度10之后拆分--这是第一位的。

以下是我迄今尝试过的:

代码语言:javascript
复制
public static IEnumerable<string> SplitString(this string sInput, string search, int maxlength)
{
    int index = Math.Min(sInput.IndexOf(search), maxlength);
    int start = 0;
    while (index != -1)
    {
        yield return sInput.Substring(start, index-start);
        start = index;
        index = Math.Min(sInput.IndexOf(search,start), maxlength);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-23 15:25:56

就我个人而言,我不喜欢RegEx。它创建了难以排除错误的代码,并且在您第一次看到它时很难确定它要做什么。因此,对于一个更长的解决方案,我将采用这样的方法。

代码语言:javascript
复制
    public static IEnumerable<string> SplitString(this string sInput, char search, int maxlength)
    {
        var result = new List<string>();
        var count = 0;
        var lastSplit = 0;

        foreach (char c in sInput)
        {
            if (c == search || count - lastSplit == maxlength)
            {
                result.Add(sInput.Substring(lastSplit, count - lastSplit));
                lastSplit = count;
            }

            count ++;
        }

        result.Add(sInput.Substring(lastSplit, count - lastSplit));

        return result;
    }

注意,我将第一个参数更改为char (从字符串中)。这段代码可能会得到更多的优化,但它是好的和可读的,这对我来说更重要。

票数 1
EN

Stack Overflow用户

发布于 2014-06-23 14:23:27

我将使用这个正则表达式:

代码语言:javascript
复制
([^x]{1,10})|(x[^x]{1,9})

这意味着:

最多匹配10个不是x或Match x的字符,最多匹配9个字符,这些字符不是x

下面是一个工作示例:

代码语言:javascript
复制
string regex = "([^x]{1,10})|(x[^x]{1,9})";
string input = "012345678x0123x01234567890123456789";
var results = Regex.Matches(input, regex)
                    .Cast<Match>()
                    .Select(m => m.Value);

让你产生价值。

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

https://stackoverflow.com/questions/24368217

复制
相关文章

相似问题

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