C# 使用点(.)或感叹号(!)拆分字符串,但忽略新字符串开头的空格

C# 使用点(.)或感叹号(!)拆分字符串,但忽略新字符串开头的空格,c#,asp.net,string,C#,Asp.net,String,这是我的大绳子 我是洛克·巴尔堡,我是好人。我太棒了!我很酷 我想把它分成这样的格式 这是罗克巴宝 我是好人 我太棒了 我很酷 我不希望任何字符串的开头有任何空格 我试过这样做 xyzArray = xyz.split(new String[] { ".", "!" }, StringSplitOptions.RemoveEmptyEntries); 我也试过这个 xyzArray = xyz.split(new String[] { ". ", "! " }, StringSplitOp

这是我的大绳子

我是洛克·巴尔堡,我是好人。我太棒了!我很酷

我想把它分成这样的格式

  • 这是罗克巴宝
  • 我是好人
  • 我太棒了
  • 我很酷
我不希望任何字符串的开头有任何空格

我试过这样做

xyzArray = xyz.split(new String[] { ".", "!" }, StringSplitOptions.RemoveEmptyEntries);
我也试过这个

xyzArray = xyz.split(new String[] { ". ", "! " }, StringSplitOptions.RemoveEmptyEntries);
在第一个选项中,我得到了正确的字符串,但前两个字符串没有分开。在第二个选项中,我在xyzArray的第三个和第四个元素的开始处得到了空格,它应该是:

string[] xyzArray = Array.ConvertAll(
    xyz.Split(new String[] { ".", "!" }, StringSplitOptions.RemoveEmptyEntries),
    x => x.TrimStart()
);
当然


简单地说,在拆分字符串之后,您将在字符串之前修剪空格。

您必须将
char
数组更改为
var xyzArray=xyz.Split('.',!')

首先,它使用字符数组中提供的分隔符和部分x=>x.TrimStart()(它是lambda表达式。您可以将其读取为x将在开始时修剪x的项),该项在xyz数组的每个字符串的开头进行修剪。

您可以执行以下操作:

var str = "This is Rock Balbao.I am the good guy. I am Awesome! And I am Cool";
var formattedString = str.Split(new[] { '.', '!' }, StringSplitOptions.RemoveEmptyEntries)
                         .Select(x => x.TrimStart());

第一条指令和第二条指令的区别是什么?你看不到字符串数组中的空格吗?很抱歉,这不是证据。这就是为什么我在下面提到了详细说明,并明确地告诉了我得到的结果get@RockBalbao无参数:(从链接的页面)空白字符会被删除,这非常感谢@xan为1000条记录设置一个循环(如果我有)不是一个最佳解决方案。是的,我知道。但是内置的速度比内联编码快,比如说LINQ有时比简单的循环慢10倍,在10000条或更多记录中,LINQ比任何循环都快。我已经在实时示例中尝试了这一点。在我关注小数据或简单循环的情况下,最大值与1-2秒相差不大。但是,当大容量数据或大量数据可用时,可能会导致5-10秒的最小延迟。我更喜欢优化编码,而不是一行就可以完成的大量代码。他们为我们做这些功能。那么,如果我们不使用它,那么谁会使用它呢?
var xyz = "This is Rock Balbao. I am the good guy. I am Awesome! And I am Cool";
            var sw = Stopwatch.StartNew();

        var xyzArray = xyz.Split('.','!');


        for (int i = 0; i < xyzArray.Length; i++)
        {
            xyzArray[i] = xyzArray[i].Trim(); 

        }
         sw.Stop();

            //end test1 
            var sw1 = Stopwatch.StartNew();
            string[] xyzArray1 = Array.ConvertAll(
    xyz.Split(new String[] { ".", "!" }, StringSplitOptions.RemoveEmptyEntries),
    x => x.TrimStart()
);
        sw1.Stop();
        Console.WriteLine("Total milliseconds : " + sw.ElapsedTicks);
        Console.WriteLine("Total milliseconds (ConvertAll) : " + sw1.ElapsedTicks);
public static TOutput[] ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput,TOutput> converter) {
    if( array == null) {
        throw new ArgumentNullException("array");
    }

    if( converter == null) {
        throw new ArgumentNullException("converter");
    }
    Contract.Ensures(Contract.Result<TOutput[]>() != null);
    Contract.Ensures(Contract.Result<TOutput[]>().Length == array.Length);
    Contract.EndContractBlock();

    TOutput[] newArray = new TOutput[array.Length];
    for( int i = 0; i< array.Length; i++) {
        newArray[i] = converter(array[i]);
    }
    return newArray;
}
string[] xyzArray = Array.ConvertAll(xyz.Split(new char[] { '.', ',', '!' },     StringSplitOptions.RemoveEmptyEntries), x => x.TrimStart());
var str = "This is Rock Balbao.I am the good guy. I am Awesome! And I am Cool";
var formattedString = str.Split(new[] { '.', '!' }, StringSplitOptions.RemoveEmptyEntries)
                         .Select(x => x.TrimStart());