簡體   English   中英

為什么C#的Replace方法需要在我的代碼中同時替換“ \\ n”和“ \\ r”?

[英]Why does C#'s Replace method need to replace both “\n” and “\r” in my code?

使用“替換”功能時,我發現嘗試替換值“ \\ 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;
}

這樣就產生了預期的結果(即用單個空格替換任何新行)。

因此,如果我通過一個“ enter-key-press”輸入一個字符串,它將存儲一個空格。

我不了解的問題(因此是問題):為什么,如果我僅使用“ Replace('\\ r','')”或“ Replace('\\ n','')”,它仍然存儲一個新隊。 我可以理解其中一個無效,但是為什么需要同時包含兩個? 如果'\\ r'或'\\ n'替換方法都不靠它們自己起作用,為什么同時使用這兩種方法呢?

我問這個問題,是因為(至少對我而言)對代碼的使用不了解是一種非常不好的習慣。 而且,我對打算使用的代碼了解得越多,就越能從將來的情況出發,充分利用其有用性。

-------------------------另一個特點----------------------- -----

如果我僅使用Replace(“ \\ r”,“”),則它提供了空格(就好像替換工作了),但是並沒有消除新行。

另外,如果我僅使用Replace(“ \\ n”,“”),它將保留新行,然后提供空格。

-------------------------最后一點---------------------- ----------

如果有關系,輸出將進入cshtml頁面上的textarea。

這是因為你的輸入數據包含"\\r\\n" (回車+換行)對,這是很常見的,在方法名稱由HTTP標准(“URL” 要求的事實說明:HTTP可以在這里參與)數據。 並且,當您查看數據時,渲染器對於所有三個行尾(分別為"\\r\\n""\\r""\\n" )的行為都相同。 這是魯棒性決定的行為。

這是因為,盡管有很多可能的換行符,但窗口(以及其他上下文)常用的是\\r\\n 看來這就是您的數據實際包含的新行分隔符。

但是,某些應用程序/環境僅使用\\r作為換行指示符,而其他應用程序/環境僅使用\\n 因此,許多應用程序已學會在顯示文本時將這三個可能的值中的任何一個解釋為新行。

如果僅用一個空格替換\\r ,則最后一個空格后面是\\n ,如果您輸入的內容最初是\\r\\n ,那么它將被解釋為一個空格后跟換行符。 同樣,僅替換\\n導致換行符( \\r )后跟一個空格。

您是否嘗試過替換Environment.NewLine?

str.Replace(Environment.NewLine, " ");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM