我正在尝试用另一个字符串替换一部分字符串。更准确地说
我有
C:\Users\Desktop\Project\bin\Debug
,我正尝试将
\bin\Debug
替换为\Resources\People
我尝试了以下操作:
path.Replace(@"\bin\Debug", @"\Resource\People\VisitingFaculty.txt");
path.Replace("\bin\Debug", "\Resource\People\VisitingFaculty.txt");
上面的两个似乎都不起作用,因为字符串保持不变,没有任何替换。难道我做错了什么?
#1 楼
问题是字符串是不可变的。方法replace,substring等不会更改字符串本身。他们创建一个新字符串并替换它。因此,对于上面的代码正确无误,应该是path1 = path.Replace("\bin\Debug", "\Resource\People\VisitingFaculty.txt");
,或者只是
path = path.Replace("\bin\Debug", "\Resource\People\VisitingFaculty.txt");
如果不需要其他变量。
这个答案也提醒我们字符串是不可变的。您对它们所做的任何更改实际上都会创建一个新字符串。因此,请记住涉及字符串的所有内容,包括内存管理。
如此处文档所述。
字符串对象是不可变的:它们在拥有对象后就不能更改
被创建。所有出现的用于修改字符串的String方法和C#运算符实际上都会在新的字符串对象中返回结果
评论
或者只是path = path.Replace(“ \\ bin \\ Debug”,“ \\ Resource \\ People \\ VisitingFaculty.txt”);如果不需要另一个变量。
–kprobst
2012年11月7日20:31
现在添加它:D我首先使用了一个不同的变量,因此表明它实际上是一个返回的字符串,但我也会对此部分做广告
– John Demetriou
2012年11月7日20:32
投票支持问题和答案,因为这解决了我遇到的问题。我不认为基于该问题的否决票是公平的,并且搜索“ string.replace C#无效”将我带到了这里。
–史蒂文·布里顿(Steven C. Britton)
2014年6月11日下午5:13
@ user1040975我不明白。你有问题吗?您的strReturn是否包含要搜索的字符串?
– John Demetriou
17年7月19日在11:44
谢谢,我一直不明白为什么在我看到替换之前,替换功能不起作用。我忘记将其分配给相同的变量。
– Caverman
17年7月28日在15:15
#2 楼
path.Replace
方法实际上返回一个string
。您应该执行以下操作:path = path.Replace("firstString", "secondString");
评论
这是一个问答式的问题。我自己回答了
– John Demetriou
2012年11月7日20:33
@macrian这并不意味着其他人无法回答。如果其他人可以提供他们认为比您更好的答案,则他们有权提供其他答案。这就是SO的目的的一部分;每个人都有能力对最佳答案做出回应并投票(无论作者如何),这些结果往往会浮出水面。
–服务
2012年11月7日20:40
你又是对的。我只是以为,当它被自我担保后,它就会被其他人关闭(这是我的第一个自我回答的问题)。我错了:D
– John Demetriou
2012年11月7日在20:41
太好了。
– MarceloBarbosa
16-10-27在13:39
#3 楼
String.Replace(string,string) returns string.
因此,将新路径保存在某些字符串变量中。
path = path.Replace("\bin\Debug", "\Resource\People\VisitingFaculty.txt");
评论
“它不起作用”是您真正不应在任何问题中遇到的问题。什么不起作用?它有什么作用?它不应该做什么?是否有错误(如果有),它们是什么?不起作用表示未按照预期执行操作,请用另一个字符串替换该字符串。这是一个问答式的问题。我刚刚找到答案,并创建了这个问与答风格的问题
尽管可以自行回答问题,但该问题仍将按照相同的标准进行。如果仅问这个问题,那将是一个低质量的问题。您的答案不会(也不会)对此产生影响。正如我所说,“它不起作用”没有任何意义。您需要陈述您期望它执行或想要执行的操作,以及它实际执行的操作。在这种情况下,“不起作用”表示路径未更改;它包含原始字符串。它不会出错,不会将字符串更改为所需输出以外的其他内容,并且该问题不是有条件的。
我相信你是对的。我将对其进行编辑以使其更正确并符合标准,以更好地理解
@JohnDemetriou,列表比帖子中的a和b更好,但这是您的问题。您可以回滚它。