2010-07-16 58 views
8

我想這樣做:有沒有簡單的方法來改變C#中的字符串中的字符?

string s = "abc"; 
s[1] = 'x'; 

和S將成爲 「AXC」。但是,string [i]似乎只有一個getter並且沒有setter。編譯器給我以下錯誤:

"Property or indexer 'string.this[int]' cannot be assigned to -- it is read only"

我想我可以做一個循環,並改變我想要的字符。但我只是想知道是否有一個簡單的方法來做到這一點?爲什麼沒有string [i]的setter?

在此先感謝。

+2

C#中的字符串是不可變的,所以你不能這樣做。 – ChrisF 2010-07-16 10:19:23

回答

18

字符串是不變的,所以你必須做出char[]陣列,改變它,然後使其恢復到一個字符串:

string s = "foo"; 
char[] arr = s.ToCharArray(); 
arr[1] = 'x'; 
s = new string(arr); 
+0

謝謝。第二行應該是char [] arr .... tho :) – StarCub 2010-07-16 10:28:42

+0

我看到它並糾正它。無論如何感謝:) – 2010-07-16 10:29:41

1

我不認爲你可以在C#中做到這一點,作爲字符串不能被改變(只是被破壞和重新創建)。看看StringBuilder課程。

2

(你舉的例子是稍有不當:S [2] =「X」應改爲「ABX」)

,你不行,因爲字符串是不可變的,你必須創建一個新的字符串:

http://en.wikipedia.org/wiki/Immutable_object

你應該使用一種方法返回一個新的字符串與所需的修改。

希望有幫助!

+0

當然!感謝您指出了這一點!大聲笑 – StarCub 2010-07-16 10:25:57

13

字符串是不可變這就是爲什麼沒有二傳手,但是,您可以使用一個字符串生成器:

StringBuilder s = new StringBuilder("abc"); 

s[1] = 'x'; 
2

記住,在管理和安全的.Net,字符串是不可變的,所以即使你能做到以上,你真的會創建一個替換字符串的新副本。

如果你只是替換一個字符,一個簡單的循環可能是你最好的選擇。

但是,如果你要進行多次更換,可以考慮使用StringBuilder

string s = "abc"; 
    var stringBuilder = new StringBuilder(s); 
    stringBuilder[1] = 'x'; 
    s = stringBuilder.ToString(); 
+0

應該是stringBuilder [1] ='x'不是stringBuilder [2]。這返回abx。 – btlog 2010-07-16 10:40:45

+0

@btlog - 更正。助教。 – 2010-07-16 12:36:09

0

是什麼樣?

string originalString = "abc"; 

     var index = 1; 
     char charToReplace = 'x'; 

     var newString = string.Format("{0}{1}{2}", originalString.Substring(0, index), charToReplace, originalString.Substring(index + 1)); 
+2

string newString = originalString.Remove(index,1).Insert(index,charToReplace) – btlog 2010-07-16 10:41:49

0

是 in c#string can not be altered。

,但我們可以試試這個

string s = "abc"; 
s = s.Replace('b', 'x'); 
Console.WriteLine(s); 

答案將是 「AXC」。 ,因爲這將用新字符串替換舊字符串。

+0

但是,如果字符串中包含多個「b」,而您只想替換第一個,這將不起作用。 – ChrisF 2010-07-16 12:32:26

1

,如果你使用的是LINQ的

private string ConvertStr(string inStr , int inIndex , char inChar) 
{ 
char[] tmp = inStr.ToCharArray(); 
tmp.SetValue(inChar , inIndex); 
return new string(tmp); 
} 

這應該讓你更換你想和你想要的任何字符任何字符,爲什麼不能做到這一點。

相關問題