2017-03-11 1 views
2

ここは大きな文字列です。ドット(。)または感嘆符(!)を使用して区切り文字列を区切りますが、新しい文字列の先頭にある空白文字は無視してください

This is Rock Balbao.I am the good guy. I am Awesome! And I am Cool

私はこれは私が私が

  • 素晴らしいと私はクールだ良い男
  • 午前ロックBalbao
  • である。この形式のよう

    • をそれを分割したい

    私はしませんすべての文字列の先頭の空白。

    私は次のよう

    xyzArray = xyz.split(new String[] { ".", "!" }, StringSplitOptions.RemoveEmptyEntries); 
    

    を試してみましたし、また、私は私が正しい文字列が、第一2文字列を取得しています最初のオプションで、この

    xyzArray = xyz.split(new String[] { ". ", "! " }, StringSplitOptions.RemoveEmptyEntries); 
    

    を試してみましたが区切られていません。そして、第二の選択肢で、私はそれがあるべきxyzArray

  • +0

    を第一及び –

    +0

    あなたは文字列配列内のスペースを見ることができない、第2の命令との違いは何ですか? –

    +0

    ごめんなさい申し訳ありません –

    答えて

    3

    の3番目と4番目の要素の先頭に空白を取得:それの

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

    ideoneを。

    簡単に言えば、分割後の文字列の前にスペースをトリミングします。

    +0

    @RockBalbao [* TrimStart()*](https://msdn.microsoft.com/library/system.string.trimstart (もしvs = vs.110).aspx)をパラメータなしで使用すると、(リンクされたページから)*空白文字が代わりに削除されます* – xanatos

    +0

    ありがとう@xanatos –

    0

    あなたはこのvar xyzArray = xyz.Split('.','!');

    var xyz = "This is Rock Balbao. I am the good guy. I am Awesome! And I am Cool"; 
         var xyzArray = xyz.Split('.','!'); 
         for (int i = 0; i < xyzArray.Length; i++) 
         { 
          xyzArray[i] = xyzArray[i].Trim(); 
    
         } 
    

    char配列を変更する必要がアップデート はあなたのConvertAllへの答えは単純なループ

    よりもはるかに高速ではないのと同じように、単にfololwingコードを試してみて、あなたは、ボンネットの下で代議員を呼び出すことは、直接mrthodよりも多くの時間を費やすことが自分自身を参照してください

    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); 
    

    直接メソッド呼び出しは、以上〜50 X速い(私はテストを何度も繰り返す必要があり)

    ところで、これはフードの下ConvertAll

    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; 
    } 
    
    +0

    1000レコードのループを繰り返す。 –

    +0

    フードの下でこれはConvertAllによって行われたことです –

    +0

    ええ、私は知っています。しかし、inbuiltがインラインコーディングでは実行できない高速化 –

    0
    string[] xyzArray = Array.ConvertAll(xyz.Split(new char[] { '.', ',', '!' },  StringSplitOptions.RemoveEmptyEntries), x => x.TrimStart()); 
    

    まず、それが分割されています文字配列に提供された区切り文字とx => x.TrimStart()の部分を持つ配列に文字列を入力します(これはラムダ式です。 xは開始時にトリムされるようなアイテムになるので、これを読むことができます)。これは、xyz配列の各文字列の最初にトリムします。

    0

    あなたがこれを行うことができます:

    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()); 
    
    関連する問題