Vb.net 为什么不是';我的字符串没有更新吗?

Vb.net 为什么不是';我的字符串没有更新吗?,vb.net,string,Vb.net,String,我有一个小字符串变量,包含400-500个字符和空格。在Do/while循环中,我尝试了一些方法来删除字符串的某些部分。我希望遍历循环,然后从中删除300个字符,但是它似乎并没有从字符串中删除它 我们是否实际上无法修改字符串对象,并且必须强制对文本变量执行子字符串才能获得所需的结果 Do while stringText.Length >= 300 'stringText.replace(textToRemove, "") This doesn't replace the string v

我有一个小字符串变量,包含400-500个字符和空格。在Do/while循环中,我尝试了一些方法来删除字符串的某些部分。我希望遍历循环,然后从中删除300个字符,但是它似乎并没有从字符串中删除它

我们是否实际上无法修改字符串对象,并且必须强制对文本变量执行子字符串才能获得所需的结果

Do while stringText.Length >= 300
'stringText.replace(textToRemove, "") This doesn't replace the string variable
'stringText.Remove(0,299) This also doesn't remove the specified range of characters
Loop

这些函数返回一个值,您必须将返回的值分配给原始字符串,以便对其进行更新:

e、 g


否则,您将丢弃返回的值-函数不会改变.NET和VB中的原始字符串,这意味着一旦定义了字符串,它就永远不会更改。各种Replace/Remove方法所做的是返回一个新的、修改过的字符串,您可以将其存储到同一个变量中

像这样:

Do while stringText.Length >= 300
   stringText = stringText.Replace(textToRemove, "") 
Loop
不过,需要注意的是,这可能会很昂贵——分配了一个新的字符串对象。如果要分别对字符串进行大量修改,则每个修改都将创建一个新副本,对于较大的字符串,可能会创建不必要的内存分配


因此,我们有一个类(roryap提到过),它允许我们直接操作字符串。请仔细阅读。

您必须为返回值指定字符串

stringText =stringText.replace(textToRemove, "") 

或者更好的方法是使用
System.Text.StringBuilder
。StringBuilder对于单个字符串的替换来说太过苛刻了。即使在循环中,如果只有少数替换项。是的,但在您的回答中一定要注意这一点,并为其使用提供适当的上下文。起始字符串的长度可能为数千个字符,这意味着将在内存中创建数千个字符串--每个循环中有一个,每个字符的长度大约为数千个字符,直到长度降至300以下。在这种情况下,StringBuilder会更好。
stringText =stringText.replace(textToRemove, "")