【问题标题】:C# string replace does not actually replace the value in the string [duplicate]C#字符串替换实际上并不替换字符串中的值[重复]
【发布时间】:2012-11-07 20:29:36
【问题描述】:

我正在尝试用另一个字符串替换字符串的一部分。更准确地说 我有C:\Users\Desktop\Project\bin\Debug

我正在尝试将\bin\Debug 替换为\Resources\People

我尝试了以下方法:

  1. path.Replace(@"\bin\Debug", @"\Resource\People\VisitingFaculty.txt");

  2. path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");

上述两个似乎都不起作用,因为字符串保持不变并且没有任何内容被替换。难道我做错了什么?

【问题讨论】:

  • “它不起作用”是您真正不应该在问题中提出的问题。什么不起作用?它有什么作用?它不应该做什么?是否有错误,如果有,是什么?
  • Doesn't work 意味着没有做它应该做的事情,用另一个字符串替换字符串。这是一个问答式的问题。我刚刚找到答案并创建了这个问答式问题
  • 虽然可以自行回答问题,但问题仍将保持相同的标准。如果单独提出这个问题,将是一个低质量的问题。您的回答不会(也不能)影响这一点。正如我所说,“它不起作用”没有任何意义。您需要说明您期望它做什么或希望它做什么,以及它实际做什么。在这种情况下,“它不起作用”意味着path没有改变;它包含原始字符串。它不会出错,不会将字符串更改为所需输出之外的其他内容,并且问题不是有条件的。
  • 我相信你是对的。我将对其进行编辑,使其更正确并符合标准,以便更好地理解
  • @JohnDemetriou,列表比帖子中的 a 和 b 更好,但这是你的问题。你可以回滚它。

标签: c# .net string


【解决方案1】:

问题是字符串是不可变的。 replace、substring 等方法不会更改字符串本身。他们创建一个新字符串并替换它。所以上面的代码是正确的,应该是

path1 = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");

或者只是

path = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");

如果不需要另一个变量。

这个答案也提醒我们字符串是不可变的。您对它们所做的任何更改实际上都会创建一个新字符串。因此,请记住所有涉及字符串的内容,包括内存管理。 如文档here中所述。

String 对象是不可变的:它们一旦拥有就无法更改 被创建。出现的所有 String 方法和 C# 运算符 修改一个字符串实际上是在一个新的字符串对象中返回结果

【讨论】:

  • 如果不需要其他变量,则只需 path = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");
  • 现在添加它:D 我首先使用了一个不同的变量,所以它显示它实际上是一个返回字符串,但我也会广告那部分
  • 对问题和答案都投了赞成票,因为这解决了我遇到的问题。我不相信基于这个问题的反对票是公平的,搜索“string.replace C# not working”把我带到了这里。
  • @user1040975 我不明白。你有问题吗?您的 strReturn 是否包含要搜索的字符串?
  • 谢谢,直到我看到这个,我才明白为什么替换不起作用。我忘了把它分配给同一个变量。
【解决方案2】:

path.Replace 方法实际上返回一个string。您应该执行以下操作:

path = path.Replace("firstString", "secondString");

【讨论】:

  • 这是一个问答式的问题。我自己回答了
  • @macrian 这并不意味着其他人无法回答。如果其他人可以提供他们认为比您更好的答案,他们完全有权提供额外的答案。这是 SO 目的的一部分;每个人都有能力做出回应,最佳答案的投票结果(无论作者如何)往往会浮到顶部。
  • 你又是对的。我只是认为,当它是 selfansered 时,它对其他人是关闭的(这是我的第一个自我回答的问题)。我错了:D
  • 哎哟......好点。
【解决方案3】:
String.Replace(string,string) returns string. 

所以,将新路径保存在某个字符串变量中。

path = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt"); 

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2011-10-10
    • 2021-06-17
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多