web-dev-qa-db-ja.com

C#でキャリッジリターンで文字列を分割する方法は?

TxbUserNameと呼ばれる複数行のテキストボックスを持つASP.NETページがあります。次に、3つの名前をテキストボックスに貼り付けて、垂直方向に揃えます。

  • ジェイソン
  • アミー
  • カレン

私は、キャリッジリターンまたは改行を検出するたびに、何らかの方法で名前を取得し、別々の文字列に分割できるようにしたいと考えています。私は配列が行く方法かもしれないと考えています。何か案は?

ありがとうございました。

56
Erica
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

これは、\ nと\ r\nの両方の改行タイプに対応し、ユーザーが入力する可能性のある空行を削除します。

次のコードを使用してテストしました。

        string test = "PersonA\nPersonB\r\nPersonC\n";
        string[] result = test.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
        foreach (string s in result)
            Console.WriteLine(s);

正しく機能し、エントリ「PersonA」、「PersonB」、および「PersonC」を持つ3つの文字列配列に分割されます。

125
jasonh

\r\n\nに置き換え、\nを使用して分割します。

string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
7
o.k.w

String.Split関数を見てください(正確な構文がわからない、IDE目の前))。

string[] names = txbUserName.Text.Split(Environment.Newline);
4
TryCatch

String.Split

mystring.Split(new Char[] { '\n' })
1
Thanatos
using System.Text;
using System.Text.RegularExpressions;


 protected void btnAction_Click(object sender, EventArgs e)
    {
        string value = txtDetails.Text;
        char[] delimiter = new char[] { ';','[' };
        string[] parts = value.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < parts.Length; i++)
        {
            txtFName.Text = parts[0].ToString();
            txtLName.Text = parts[1].ToString();
            txtAge.Text = parts[2].ToString();
            txtDob.Text = parts[3].ToString();
        }
    }
1
Rubi

何をしたいかに依存します。別のオプションは、おそらく小さなリストには過剰ですが、より大きな文字列にはよりメモリ効率が良いかもしれませんが、StringReaderクラスを使用して列挙子を使用することです。

_IEnumerable<string> GetNextString(string input)
{
    using (var sr = new StringReader(input))
    {
        string s;
        while ((s = sr.ReadLine()) != null)
        {
            yield return s;
        }
    }
}
_

これは_\n_と_\r\n_の両方の行末をサポートします。 IEnumerableを返すので、foreachで処理するか、標準のlinq拡張機能(ToList()ToArray()Whereなど)。

たとえば、foreachの場合:

_var ss = "Hello\nworld\r\ntwo bags\r\nsugar";
foreach (var s in GetNextString(ss))
{
    Console.WriteLine("==> {0}", s);
}
_
0
Chris J

これを試して:

message.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

動作する場合:

var message = "test 1\r\ntest 2";

または

var message = "test 1\ntest 2";

または

var message = "test 1\rtest 2";
0
Tovich