[英]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.