簡體   English   中英

逐字字符串替換

[英]Verbatim string replace

    var a = "asdfgh\r";
    Console.WriteLine(a.Contains(@"\r"));
    var b = a.Replace(@"\r","").Replace(@"\n","");
    var c = a.Replace("\r","").Replace("\n","");
    Console.WriteLine(a);
    Console.WriteLine(b);
    Console.WriteLine(c);

“b”和“c”打印相同的字符串,“a”打印假,

我試圖將 \r 和 \n 替換為空字符,所以首先我嘗試了下面的代碼,“\r”和“\n”中有一個反斜杠,所以我決定在它們之前使用“@”;

var b = a.Replace(@"\r","").Replace(@"\n","")

但這沒有用,

var c = a.Replace("\r","").Replace("\n","");

這行得通,所以我很困惑什么時候應該使用“@”字符?

您聲明字符串a以回車符結尾:

var a = "asdfgh\r"; //it has a length of 7 when compiled 

因此,您必須將回車替換為空:

Replace("\r","")

如果您已聲明字符串以“反斜杠 r”結尾:

var a = @"asdfgh\r"; //it has a length of 8 when compiled 

那么你就可以成功地用任何內容替換“反斜杠 r”:

Replace(@"\r","")

這也可以:

Replace("\\r","")

因為雙斜杠變成了單斜杠,然后 r 是一個普通字符,所以你要替換“反斜杠 r”而不是回車


在編譯 C# 時,編譯器會在字符串中查找 \ 並根據某些規則轉換以下字符。 在字符串之前使用 @ 會關閉此功能。 大多數情況下,它對路徑很有用。 請記住,這是編譯時的事情,而不是您需要對保存在運行時輸入的數據的變量執行的操作。 在變量名前加上 @ 意味着不同的東西——允許你將變量稱為保留字,如string @for = "for" ——可悲的做法; 不要這樣做

最終的問題是您在聲明字符串時不一致 - a不是逐字字符串,因此它確實有一個回車字符,然后您嘗試使用逐字字符串替換(並且“反斜杠 r”是不同的字符串到“回車”

暫無
暫無

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

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