web-dev-qa-db-ja.com

改行で文字列を多くの文字列に分割しますか?

複数の値に分割する必要がある入力データがあります...

2345\n564532\n345634\n234 234543\n1324 2435\n

長さは受け取ったときに一貫性がなく、間隔が存在するときに一貫性がなく、各\ nの前の最後の3桁を分析したいと思います。文字列を分割して新しい文字列に変換するにはどうすればよいですか?私が言ったように、このラウンドでは、コマンドが3つある可能性があります。次回は10個ある可能性があります。3つの新しい文字列を作成して分析し、次の10個が入る前に破棄するにはどうすればよいですか。

string[] result = x.Split('\r');
result = x.Split(splitAtReturn, StringSplitOptions.None);
string stringToAnalyze = null;

foreach (string s in result)
{
    if (s != "\r")
    {
        stringToAnalyze += s;
    }
    else
    {

          how do i analyze the characters here?
    }
}
7
darthwillard

string.Splitメソッド を使用できます。特に、可能なセパレータの文字列配列を使用するオーバーロードを使用することをお勧めします。これは、改行文字で分割すると固有の問題が発生するためです。あなたの例ではすべての改行文字は単に '\ n'ですが、一部のOSでは改行文字は '\ r\n'であり、同じファイルに2つを含める可能性を除外できない場合は、

string test = "2345\n564532\n345634\n234 234543\n1324 2435\n";
string[] result = test.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

代わりに、ファイルにOSで許可されている改行区切り文字のみが含まれていることが確実な場合は、次を使用できます。

string test = "2345\n564532\n345634\n234 234543\n1324 2435\n";
string[] result = test.Split(new string[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);

StringSplitOptions.RemoveEmptyEntriesを使用すると、連続する改行のペアまたは終了する改行を空の文字列としてキャプチャできます。

これで、すべての文字列の最後の3桁を調べる配列で作業できます。

foreach(string s in result)
{
    // Check to have at least 3 chars, no less
    // otherwise an exception will occur
    int maxLen = Math.Min(s.Length, 3);
    string lastThree = s.Substring(s.Length - maxLen, maxLen);

    ... work on last 3 digits 
}

代わりに、元の文字列を分割せずに改行文字のインデックスのみを使用して作業する場合は、このようにstring.IndexOfを使用できます

string test = "2345\n564532\n345634\n234 234543\n1324 2435\n";
int pos = -1;
while((pos = test.IndexOf('\n', pos + 1)) != -1)
{
    if(pos < test.Length)
    {
        string last3part = test.Substring(pos - 3, 3);
        Console.WriteLine(last3part);
    }
}
23
Steve
string lines = "2345\n564532\n345634\n234 234543\n1324 2435\n";
var last3Digits = lines.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                  .Select(line => line.Substring(line.Length - 3))
                  .ToList();

foreach(var my3digitnum in last3Chars)
{

}

last3Digits:[345, 532, 634, 543, 435]

2
L.B

これは以前に回答されています。このスレッドを確認してください: 。NETの改行で文字列を分割する最も簡単な方法は?

別の方法は、StringReaderを使用することです。

using (System.IO.StringReader reader = new System.IO.StringReader(input)) {
    string line = reader.ReadLine();
}
1
Louis