2016-11-23 45 views
2

這是其中一個問題。基本上我卡住了。爲什麼不是String.Replace替換任何東西?

寫一個刪除一個字符串的所有出現從另一個字符串的方法:

[Test] 
    public void TestExercise12() 
    { 
     Programmeren2Tests.Chapter12Test.TestExercise12(Exercise12); 
    } 

    public static string Exercise12(string strToRemove, string str) 
    { 
     strToRemove.Replace("str", "x"); 
     return str; 

    } 

我在這裏做什麼顯然沒有工作,但我不知道在哪裏,就如何搜索做這個。

+0

['String.Replace()'](https://msdn.microsoft.com/en-us/library/fk49wtc1(v = vs.110).aspx)不會修改您的字符串,它*返回*帶有替換品的全新字符串。要「移除」一個匹配的字符串,你可以用''''''等同於'string.Empty'替換它。你的代碼應該簡單的說就是'return str.Replace(strToRemove,string.Empty);'。編輯:實際上,閱讀我鏈接的MSDN頁面可以使用'null'或'string.Empty'作爲替換,因爲,「如果newValue爲null,則刪除所有oldValue。」。 – Quantic

+0

另外,你的家庭作業是爲了簡單*利用* Replace方法,還是你期望實際實現底層算法? – Dai

+1

雖然我確實想要說明,但不要只說「它顯然不起作用」,乍一看可能並不明顯(即使在這種情況下)。描述實際發生的情況並返回 – Dispersia

回答

5

字符串在C#/一成不變NET,所以foo.Replace將不會更新的foo值,而是會返回一個新值:

String foo   = "abc"; 
String fooWithoutB = foo.Replace("b", ""); 

Assert.AreEqual("abc", foo  ); 
Assert.AreEqual("ac" , fooWithoutB); 

其他一些注意事項:

  • 避免「匈牙利符號」(例如str前綴到您的變量名稱)。這是不鼓勵的。
  • 使用有意義的名稱。 str沒有告訴我任何關於它的用途。考慮像RemoveAllOcurrences(String needle, String haystack)(String ofThis, String fromThis)這樣的簽名。
  • 您的原始方法返回原始的第二個參數不變。如果您使用IDE的直通式調試器,則可能會發現此錯誤。
1

首先,運行到這樣的事情時,你應該看看主要地方是MSDN下的文檔。 (鏈接爲String.Replace

雖然你的拳頭錯誤很明顯。您在Replace的調用中使用字符串常量而不是方法參數。如果你只是要刪除的字符串,用空字符串替換:

strToRemove.Replace(strToRemove, ""); 

注意周圍有參數名沒有引號,你是不是想替換字符串「strToRemove」,但變量的值strToRemove

返回其在 當前實例指定字符串的所有出現與另一指定字符串替換一個新的字符串:當你讀這說這的文檔的第二個錯誤被發現。

Replace不會修改原始字符串,所以你需要分配結果,並返回

string fixedString = strToRemove.Replace("str", "x"); 
return fixedString; 
0

正如你可以看到功能Exercise12之前有「線」,這意味着它返回作爲結果的字符串。

它在括號(2個參數)之間也有2個不同的字符串,所以這個函數應該讀取2個字符串,操作它們,然後返回一個字符串作爲結果。

public static string Exercise12(string stringtoRemove, string originalString) 
{ 
    string resultString = ""; 
    resultString = originalString.Replace(stringtoRemove, ""); 
    return resultString ; 

} 

正如你所看到的,我們創建了一個名爲resultString新的字符串,其值等於originalString值,並在每一個存在時間「無」取代stringtoRemove。

請注意,stringtoRemove不應該有引號,所以你可以得到它的實際值。

+0

避免爲參數和當地人使用TitleCase。只有非字段成員,名稱空間和類型名稱才能在.NET中使用TitleCase。 – Dai

+0

雖然這個答案是正確的,但波濤洶涌的語法很難看懂。 – BradleyDotNET

+0

感謝您的諮詢! –

相關問題