C# 拆分字符串并保留不带正则表达式C的分隔符#

C# 拆分字符串并保留不带正则表达式C的分隔符#,c#,string,split,C#,String,Split,问题:花太多时间解决简单的问题。哦,这是一个简单的问题 输入:字符串指令,字符分隔符 输出:string[]outtrs其中string.Join(“,outtrs)==inStr,最后一项之前的outtrs中的每个项必须以分隔符结尾。如果inStr以分隔符结尾,则outtrs中的最后一项也以分隔符结尾 例1: 输入:“my,string,separated,by,commas”,,“ 输出:[“我的”,“字符串”,“分隔”,“由”,“逗号”] 例2: 输入:“my,string,se

问题:花太多时间解决简单的问题。哦,这是一个简单的问题

  • 输入:
    字符串指令
    字符分隔符
  • 输出:
    string[]outtrs
    其中
    string.Join(“,outtrs)==inStr
    ,最后一项之前的
    outtrs
    中的每个项必须以分隔符结尾。如果
    inStr
    以分隔符结尾,则
    outtrs
    中的最后一项也以分隔符结尾
例1:

  • 输入:
    “my,string,separated,by,commas”
    ,“
  • 输出:
    [“我的”,“字符串”,“分隔”,“由”,“逗号”]
例2:

  • 输入:
    “my,string,separated,by,commas,”
    ,“
  • 输出:
    [“我的”、“字符串”、“分隔的”、“被”、“逗号”、“逗号”]
    (注意后面的逗号)
使用正则表达式的解决方案:

我想避免使用正则表达式,因为这只需要比较字符。在算法上,它与
string.Split()
所做的一样复杂。我找不到一个更简洁的方法来做我想做的事,这让我很烦恼

我的糟糕的解决方案,对我不起作用。。。它应该更快更简洁

var outStr = inStr.Split(new[]{delimiter}, 
                         StringSplitOptions.RemoveEmptyEntries)
                  .Select(x => x + delimiter).ToArray();
if (inStr.Last() != delimiter) {
    var lastOutStr = outStr.Last();
    outStr[outStr.Length-1] = lastOutStr.Substring(0, lastOutStr.Length-1);
}

不使用正则表达式对我来说似乎很简单:

string inStr = "dasdasdas";
char delimiter = 'A';
string[] result = inStr.Split(new string[] { inStr }, System.StringSplitOptions.RemoveEmptyEntries);
string lastItem = result[result.Length - 1];
int amountOfLoops = lastItem[lastItem.Length - 1] == delimiter ? result.Length - 1 : result.Length - 2;
for (int i = 0; i < amountOfLoops; i++)
{
    result[i] += delimiter;
}
string inStr=“dasdas”;
字符分隔符='A';
string[]result=inStr.Split(新字符串[]{inStr},System.StringSplitOptions.RemoveEmptyEntries);
字符串lastItem=result[result.Length-1];
int amountops=lastItem[lastItem.Length-1]==分隔符?result.Length-1:result.Length-2;
对于(int i=0;i
在我看来,不使用正则表达式非常简单:

string inStr = "dasdasdas";
char delimiter = 'A';
string[] result = inStr.Split(new string[] { inStr }, System.StringSplitOptions.RemoveEmptyEntries);
string lastItem = result[result.Length - 1];
int amountOfLoops = lastItem[lastItem.Length - 1] == delimiter ? result.Length - 1 : result.Length - 2;
for (int i = 0; i < amountOfLoops; i++)
{
    result[i] += delimiter;
}
string inStr=“dasdas”;
字符分隔符='A';
string[]result=inStr.Split(新字符串[]{inStr},System.StringSplitOptions.RemoveEmptyEntries);
字符串lastItem=result[result.Length-1];
int amountops=lastItem[lastItem.Length-1]==分隔符?result.Length-1:result.Length-2;
对于(int i=0;i
使用LINQ:

string input = "my,string,separated,by,commas";
string[] groups = input.Split(',');
string[] output = groups
    .Select((x, idx) => x + (idx < groups.Length - 1 ? "," : string.Empty))
    .Where(x => x != "")
    .ToArray();
使用LINQ:

string input = "my,string,separated,by,commas";
string[] groups = input.Split(',');
string[] output = groups
    .Select((x, idx) => x + (idx < groups.Length - 1 ? "," : string.Empty))
    .Where(x => x != "")
    .ToArray();
公共静态IEnumerable SplitAndKeep(此字符串为s,字符串为[]delims)
{
int start=0,索引;
字符串selectedseparator=null;
而((索引=s.IndexOfAny(delims,start,out selectedseparator))!=-1)
{
如果(SelectedSeparator==null)
继续;
如果(索引-开始>0)
收益率返回s.子字符串(开始,索引-开始);
收益率返回s.子字符串(索引,选择分隔符.长度);
开始=索引+所选分隔符。长度;
}
如果(开始
公共静态IEnumerable SplitAndKeep(此字符串s,字符串[]delims)
{
int start=0,索引;
字符串selectedseparator=null;
而((索引=s.IndexOfAny(delims,start,out selectedseparator))!=-1)
{
如果(SelectedSeparator==null)
继续;
如果(索引-开始>0)
收益率返回s.子字符串(开始,索引-开始);
收益率返回s.子字符串(索引,选择分隔符.长度);
开始=索引+所选分隔符。长度;
}
如果(开始
@James我不需要使用正则表达式的强大功能。这是一个简单的性格比较。这感觉像是一个太大的工具。这个问题并不比
string.Split()
方法更难,只是功能需要稍微不同。用正则表达式解决了这个问题。使用这些值时是否有可能附加分隔符?类似于:
foreach(outtrs中的字符串标记){string value=token+delimiter;}
?@James我不需要使用正则表达式的功能。这是一个简单的性格比较。这感觉像是一个太大的工具。这个问题并不比
string.Split()
方法更难,只是功能需要稍微不同。用正则表达式解决了这个问题。使用这些值时是否有可能附加分隔符?类似于:
foreach(突出的字符串标记){string value=token+delimiter;}
?如果
inStr
末尾有分隔符会发生什么情况?@johncarcenter removemptyentries将删除结尾的分隔符,因为它将是一个空字符串,这不是我想要的。我将更新我的问题以使其更清楚。@johncarcenter您能发布一个您正在使用的字符串输入的确切示例吗。。它真的包括双引号和单引号吗?@johncarcenter查看我的编辑,类似的内容是我能理解的。如果
inStr
末尾有分隔符,会发生什么情况?@johncarcenter removemptyentries将删除结尾处的分隔符,因为它将是一个空字符串,这不是我想要的。我将更新我的问题以使其更清楚。@johncarcenter您能发布一个您正在使用的字符串输入的确切示例吗。。它真的包括双引号和单引号吗?@johncarcenter查看我的编辑,这是我能理解的。谢谢,我想这将是我在没有.Net库调用的情况下能做的最好的事情。谢谢,我想这将是我在没有.Net库调用的情况下能做的最好的事情。