2009-11-12 6 views
13

は、私は私のXAMLファイル内のテキストボックスを持っている:' n r'を行末として追加する複数行のTextBoxから文字列をList <string>に分割する方法はありますか?

<TextBox 
      VerticalScrollBarVisibility="Visible" 
      AcceptsReturn="True" 
      Width="400" 
      Height="100" 
      Margin="0 0 0 10" 
      Text="{Binding ItemTypeDefinitionScript}" 
      HorizontalAlignment="Left"/> 

いると私は私が順番にCreateTable(List<string>)を呼び出しCreateTable(string)に送信する文字列を取得します。

public override void CreateTable(string itemTypeDefinitionScript) 
{ 
    CreateTable(itemTypeDefinitionScript.Split(Environment.NewLine.ToCharArray()).ToList<string>()); 
} 

public override void CreateTable(List<string> itemTypeDefinitionArray) 
{ 
    Console.WriteLine("test: " + String.Join("|", itemTypeDefinitionArray.ToArray())); 
} 

問題は、文字列が明らかにのみ分割(「\ rを」)そうであるようにそれらのいずれかを取得しますスプリットので、すべての行の末尾に(「\ n」を)「\ n個の\ r」を有していることですそして、Environment.Newline.ToCharArrayを()を使用して、私はこれで入力すると:

one 
two 
three 

この生成:

one||two||three 

しかし、私はこれを生成するために、もちろんそれをしたいです

one|two|three 

List<string>に '\n\r'の末尾の文字列を単純に解析する1行とは何ですか?

+0

あなたはそれが '\ n \ r'で、それ以外の方法ではないと確信していますか? –

+1

それは別の方法かもしれませんが、私はEnvironment.NewLineが正しい順序でそれを持っていると思うでしょう。ユニットセパレータとしてその2文字の行を分割することができます –

答えて

29

何か仕事ができる:

string input = "line 1\r\nline 2\r\n"; 
List<string> list = new List<string>(
          input.Split(new string[] { "\r\n" }, 
          StringSplitOptions.RemoveEmptyEntries)); 

あなたのニーズに適したセパレータ文字列で"\r\n"を交換してください。

List<string> list = new List<string>(Regex.Split(input, Environment.NewLine)); 
+0

優れています。 –

6

は、セパレータとしてstring[]を取るstring.Splitのオーバーロードを使用します。このような

itemTypeDefinitionScript.Split(new [] { Environment.NewLine }, 
           StringSplitOptions.RemoveEmptyEntries); 
11

はこれを試します行を投げ捨てることはありません。

+3

空白行を保存する唯一のソリューションは+1です。 –

3

マイナーほか:

List<string> list = new List<string>(
          input.Split(new string[] { "\r\n", "\n" }, 
          StringSplitOptions.None)); 

は "\ rを" なしの例をキャッチします(私は古代のFORTRANのFIFOコードから多くのそのような例をしました...)

関連する問題