【问题标题】:Is there an easy way to change a char in a string in C#?有没有一种简单的方法可以在 C# 中更改字符串中的字符?
【发布时间】:2010-07-16 10:16:54
【问题描述】:

我想这样做:

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

和 s 将变成“axc”。但是,似乎 string[i] 只有一个 getter 而没有 setter。编译器给了我以下错误:

"属性或索引器 'string.this[int]' 无法赋值 to -- 它是只读的"

我想我可以创建一个循环并更改我想要的字符。但我只是想知道是否有一种简单的方法可以做到这一点?为什么没有 string[i] 的 setter?

提前致谢。

【问题讨论】:

  • C# 中的字符串是不可变的,所以你不能这样做。

标签: c# string char


【解决方案1】:

字符串是不可变的,所以你必须创建一个char[] 数组,对其进行更改,然后将其重新变为字符串:

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

【讨论】:

    【解决方案2】:

    字符串是不可变的,这就是为什么没有设置器,但是您可以使用字符串生成器:

    StringBuilder s = new StringBuilder("abc");
    
    s[1] = 'x';
    

    【讨论】:

      【解决方案3】:

      (您的示例略有错误:s[2] = 'x' 应将其更改为“abx”。)

      不,你不能,因为字符串是不可变的,你必须创建一个新的字符串:

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

      您应该使用一种方法,该方法返回具有所需修改的新字符串。

      希望有帮助!

      【讨论】:

        【解决方案4】:

        请记住,在托管和安全的 .Net 中,字符串是不可变的,因此即使您可以执行上述操作,您也确实会创建带有替换的字符串的新副本。

        如果你只替换一个字符,一个简单的循环可能是你最好的选择。

        但是,如果您要进行多次替换,请考虑使用StringBuilder

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

        【讨论】:

        • 应该是 stringBuilder[1] = 'x' 而不是 stringBuilder[2]。这将返回 abx。
        【解决方案5】:

        我认为您不能在 C# 中执行此操作,因为字符串无法更改(只能销毁和重新创建)。看看StringBuilder 类。

        【讨论】:

          【解决方案6】:

          如果你正在使用一些 Linq,为什么不这样做

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

          这应该可以让你用你想要的任何字符替换你想要的任何字符。

          【讨论】:

            【解决方案7】:

            这是怎么回事?

            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));
            

            【讨论】:

            • string newString = originalString.Remove(index, 1).Insert(index, charToReplace) 怎么样
            【解决方案8】:

            是的 在 c# 中的字符串不能被更改。

            但我们可以试试这个

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

            答案将是“axc”。 因为这将用新字符串替换旧字符串。

            【讨论】:

            • 但是如果字符串中包含多个“b”,而你只想替换第一个,那就不行了。
            猜你喜欢
            • 2010-09-17
            • 2011-09-20
            • 2010-12-05
            • 1970-01-01
            • 2011-04-14
            • 1970-01-01
            • 1970-01-01
            • 2018-06-02
            相关资源
            最近更新 更多