-1

Replace 関数を使用しているときに、値 "\r" や "\n" を置換しようとしたときに、予期しないことに気付きました。

外部 .cs ファイルに次のメソッドがあります (作業中):

public static string UrlEncode(string stringItem)
{
    stringItem = stringItem.Replace("%", "%25").
    Replace("\"", "%22").Replace("#", "%23").
    Replace("\\", "%5C").Replace("&", "%26").
    Replace("'", "%27").Replace("+", "%2B").
    Replace("\r", "").Replace("\n", " ");
    return stringItem;
}

これにより、目的の結果が得られます (つまり、新しい行が 1 つのスペースに置き換えられます)。

したがって、単一の「enter-key-press」で文字列を渡すと、代わりにスペースが格納されます。

私が理解していないこと (したがって質問です): なぜ、「Replace('\r', ' ')」または「Replace('\n', ' ')」のみを使用すると、改行。どちらか一方が機能していないことは理解できますが、なぜ両方を含める必要があるのでしょうか? '\r' または '\n' 置換メソッドのどちらも単独では機能しない場合、両方を使用しても機能するのはなぜですか?

私がこの質問をするのは、それを理解せずにコードを使用するのは (少なくとも私にとって) 非常に悪い習慣だからです。また、使用しようとしているコードを理解すればするほど、将来、状況に応じてその有用性を活用することができます。

------------------------- もうひとつの特徴 ----------------------- -----

Replace("\r", " ") のみを使用すると、(置換が機能したかのように) スペースが提供されますが、新しい行は削除されません。

または、Replace("\n", " ") のみを使用すると、新しい行が保持され、スペースが提供されます。

--------------- 最後の注意 ---------------------- ----------

問題がある場合、出力は cshtml ページのテキストエリアに表示されます。

4

3 に答える 3

5

これは、入力データに"\r\n"(キャリッジ リターン + ライン フィード) ペアが含まれているためです。これは非常に一般的であり、実際は HTTP 標準 (メソッド名の「URL」は HTTP がここに含まれている可能性があることを示しています) で必要とされています。また、データを表示すると、レンダラーは 3 つの行末すべて ( "\r\n""\r"alone 、および"\n"alone ) で同じように動作しています。これは、堅牢性によって決定される動作です。

于 2013-02-21T18:51:55.523 に答える
4

これは、可能性のある新しい行シーケンスが多数ある一方で、(他のコンテキストの中でも)Windowsで一般的に使用されるものがであるためです\r\n。これは、データに新しい行区切り文字として実際に含まれているもののように見えます。

ただし、一部のアプリケーション/環境\rは改行インジケーターとしてのみ使用し、他のアプリケーション/環境はのみを使用します\n。このため、多くのアプリケーションは、テキストを表示するときに、これら3つの可能な値のいずれかを改行として解釈することを学習しました。

スペースだけ で置き換える\rと、スペースの後にが続き\nます。入力が元々だった場合\r\nは、スペースの後に改行が続くと解釈されます。同様に、単に置き換える\nと、改行(\r)の後にスペースが続きます。

于 2013-02-21T18:53:47.723 に答える
0

Environment.NewLine を置き換えてみましたか?

そのような

str.Replace(Environment.NewLine, " ");
于 2013-02-21T18:49:39.057 に答える