1

対象ファイル:

Hello
World

コード:

if (file != null)
{
    //Read file one character at a time
    StreamReader reader;
    reader = new StreamReader(file);
    do
    {
        int s = reader.Read();
        char sC = (char)s;
        if (sC.Equals(Environment.NewLine))
        {
            Console.WriteLine("+1");
        }
        Console.WriteLine((char)s);
    } while (!reader.EndOfStream);
    reader.Close();
    reader.Dispose();
}

出力:

H
e
l
l
o




W
o
r
l
d

したがって(sC.Equals(Environment.NewLine))、一度に1文字ずつ読み取るときに、明らかにプラットフォームに依存しない改行を検出しません..これを行うにはどうすればよいですか?

4

5 に答える 5

6

代わりにこれを試してください

if (sC.Equals('\n'))

常に\rafterがあると確信している場合は、別の呼び出し\nでそれを飲み込むことができます。reader.Read();例:

if (sC.Equals('\n')) {
   reader.Read()
   Console.WriteLine("+1");
}
于 2012-05-28T14:09:16.987 に答える
2

これEnvironment.NewLineは、(環境によって異なりますが、Windows プラットフォームでは ) でString構成されているためです。これは、改行文字と改行文字であり、通常、改行を定義するペアです。\r\n\r\n

したがって、文字 ( または のいずれ\n\r) を比較すると、\r\n常に結果が得られます。false

代わりに、@jurgen d の回答で述べたように、 と比較してみてください\n

于 2012-05-28T14:11:38.530 に答える
0

Environment.NewLineは実際には 2 文字です: \r\n

一度に 1 文字ずつ読み取る必要がありますか? StringReader代わりに a を使用して ReadLine() を使用したいと思いませんか?

于 2012-05-28T14:13:08.520 に答える
0

簡単な削除方法 \n\r

        String text = "test\n\r";
        if (text[text.Length - 1] == 10 && text[text.Length - 2] == 13)
            text= text.Substring(0, text.Length - 2);
于 2013-11-08T15:34:28.663 に答える