2009-07-14 5 views
207

単語である区切り文字を使用して文字列を分割したい場合はどうすればよいですか?例えば、This is a sentenceC#で文字列を複数文字の区切り文字で分割するにはどうすればよいですか?

isに分割し、Thisa sentenceを取得します。

Javaでは、文字列を区切り文字として送信できますが、これはどのようにC#で行いますか?

Regex regex = new Regex(@"\bis\b"); 
string[] substrings = regex.Split("This is a sentence"); 

foreach (string match in substrings) 
{ 
    Console.WriteLine("'{0}'", match); 
} 

編集

答えて

257

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

ドキュメントからの例:

string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]"; 
string[] stringSeparators = new string[] {"[stop]"}; 
string[] result; 

// ... 
result = source.Split(stringSeparators, StringSplitOptions.None); 

foreach (string s in result) 
{ 
    Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s); 
} 
+7

これは実際に返されます。 「Thの」「を」「文」 質問に与えられた例で – IRBMe

+4

これは単なる例です...要点:区切り文字として文字列を取るString.Splitがあります。 –

+1

はい、しかしそれはしませんあなたが指定した質問が実際に質問者*が望むものであるかどうかは別の質問ですが、ここで質問される質問には答えられません単純にString.Splitで – IRBMe

51

あなたはRegex.Split方法、このようなものを使用することができますこれは、あなたが与えた例を満たします。通常ののstring.Splitも単語の末尾に「ある」に分割することに注意してください「これは」、それゆえ、なぜ私は正規表現方法を使用し、「ある」周りの単語の境界を含ま。ただし、この例を誤って書き込んだ場合は、String.Splitで十分でしょう。

+0

@編集:私はまだどちらかとは思っていませんでしたが、彼の目標が " "です。 – ahawker

+1

これは、スペースを左、右、または両方に移動する必要があるかどうかわからないため、どちらも機能しません(少なくとももっと多くの労力を費やすことはありません)。文字列。 – IRBMe

+0

String.Splityはすでに文字列を分割することができますので、複雑すぎるようです。 –

4

あなたは、文字列で発生し、文字列を使用していない文字を使用して希望の分割文字列を置換するString.Replace()を使用することができます。その文字を分割して、結果の文字列を同じエフェクトで分割します。

25
string s = "This is a sentence."; 
string[] res = s.Split(new string[]{ " is " }, StringSplitOptions.None); 

for(int i=0; i<res.length; i++) 
    Console.Write(res[i]); 

はEDIT:あなただけ単語をしたいという事実を維持するために、アレイ内のスペースを両側にパディングされる「さ」の文章や単語から削除「された」「この」無傷のままにする。

+9

もちろん、これは「それは何なのですか? – JohnFx

-5
このポスト上の既存の応答に基づいて
string strData = "This is much easier" 
int intDelimiterIndx = strData.IndexOf("is"); 
int intDelimiterLength = "is".Length; 
str1 = strData.Substring(0, intDelimiterIndx); 
str2 = strData.Substring(intDelimiterIndx + intDelimiterLength, strData.Length - (intDelimiterIndx + intDelimiterLength)); 
+15

コードを転記する前に、そうでないことを明示しない限り、まずコンパイラを実行してみてください。最初の行にはセミコロンがなく、str1とstr2は定義されていません。言うまでもなく、コードは実際にOPがどのようにして動作するかはわかりません。このコードはそれを「Th」に分割し、「はるかに簡単です」。 – mandreko

27

、これは実装を簡素化:)

namespace System 
{ 
    public static class BaseTypesExtensions 
    { 
     /// <summary> 
     /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator 
     /// </summary> 
     /// <param name="s"></param> 
     /// <param name="pattern"></param> 
     /// <returns></returns> 
     public static string[] Split(this string s, string separator) 
     { 
      return s.Split(new string[] { separator }, StringSplitOptions.None); 
     } 


    } 
} 
+7

+1、これは拡張メソッドのために悲鳴を上げる。これは組み込みの過負荷の1つではありません。 –

+7

@ToddMenier「ほぼ」とはどういう意味ですか? – mwardm

4

...要するに:

string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None); 
3

またはこのコードを使用します。 (同じ:新しい文字列[])

関連する問題