我是 C# 的初學者,正在學習一些教程。我最近在操作字串時遇到了這個問題。
string myName = "Jhon";
myName = myName.ToUpper();
myName = myName.Replace("Jhon", "doe").ToUpper();
Console.WriteLine($"Hello {myName}");
Console.WriteLine($"Hello {myName}");
答案是
Hello JHON
Hello JHON
為什么字串Jhon沒有被替換為doe?為什么第一個有效而最后一個沒有?
uj5u.com熱心網友回復:
您myName使用第二行中的函式將 的值更改為大寫.ToUpper(),將Jhon轉換為JHON。
然后在第三行,您嘗試用doe替換Jhon,但不要忘記您剛剛將Jhon轉換為JHON!
該.Replace()函式區分大小寫,不會在您的字串中找到任何匹配的替換
此外,如果您想myName在將其轉換為大寫后立即顯示,您應該Console.WriteLine($"Hello {myName}");在第二行和第三行之間放置一個,因為如果不是,您將在控制臺顯示之前再次修改該值
最后,您的代碼可能如下所示:
string myName = "Jhon";
myName = myName.ToUpper();
Console.WriteLine($"Hello {myName}");
myName = myName.Replace("JHON", "doe").ToUpper();
Console.WriteLine($"Hello {myName}");
uj5u.com熱心網友回復:
在myName = myName.ToUpper();myName 變數等于“JHON”之后,對于 Replace() 方法,字串區分大小寫。
uj5u.com熱心網友回復:
為什么字串 Jhon 沒有被 doe 替換?
因為存在JHON價值而不是Jhon由于ToUpper()呼叫和分配。
你可能想做這樣的事情
string myName = "Jhon";
string myName1 = myName.ToUpper();
string myName2 = myName.Replace("Jhon", "doe").ToUpper();
Console.WriteLine($"Hello {myName1}");
Console.WriteLine($"Hello {myName2}");
uj5u.com熱心網友回復:
第一的。就其本質而言,字串在 C# 中是不可變的。這意味著您永遠無法真正更改現有字串。您可以簡單地根據舊字串創建一個新字串。
其次:請谷歌一下關于按值傳遞與傳遞是參考。字串是通過參考傳遞的型別。這意味著 myName 不是字符塊,而是對它的參考。
就像你可以問一個人在哪里一樣。這個家伙的名字是 myName,首先你告訴他他應該指向“Jhon”文本。比你讓計算機在不同的地方寫一個新的字串,Jhon 是大寫的,然后告訴老兄 myName 從現在開始他應該把你指向那個新字串。
最后你問 myName 帶你到它指向的字串(在上一步之后)它指向值“JOHN”,而不是你要求計算機將“JOHN”中出現的“John”替換為“doe”,因為 Replace 是大小寫敏感它不會在“JOHN”中找到任何“John”,因此您會得到最終結果。
在每次操作后列印變數值確實是個好主意,這樣您就可以真正知道哪個操作沒有按預期作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365680.html
上一篇:我必須使用的集合vs串列
下一篇:我在哪里沒有關閉流?
