删除字符串的最后一个字符(VB.NET 2008)

8

我想要移除一个字符串的最后一个字符,这个字符是一个换行符 (System.Environment.NewLine)。

我尝试了一些方法,但是都无法移除它。

例如:

myString.Remove(sFP.Length - 1)

示例2:

myString= Replace(myString, Environment.NewLine, "", myString.Length - 1)

我该如何做呢?

3个回答

22

如果您的换行符是CR LF,那么实际上是两个连续的字符。尝试使用Length - 2调用您的Remove方法。

如果您想要删除字符串末尾的所有"\n"和"\r"字符,请尝试调用TrimEnd,传递这些字符:

str.TrimEnd(vbCr, vbLf)

如果想要删除所有空白字符(包括换行符、制表符、空格等等),只需调用TrimEnd方法而不传递任何参数即可。


就像在C#、VB中一样,字符串是不可变的。 - Konrad Rudolph
@Konrad 当然可以!现在我想起来了,这个问题中指出这一点实际上非常重要,因为它可能会特别令人困惑。澄清一下,我的意思是提供一个表达式,而不是一个语句。它不会修改str变量。返回值是一个独立的字符串。如果你想改变变量,你必须使用类似str = str.TrimEnd()的东西。 - Mehrdad Afshari
1
好的。谢谢。根据您的示例解决了问题:myString = myString.Remove(mystring.Length - 2)。 - aco
1
@yae 不过这种方法有点不可靠,因为你可能会得到一个以LF结尾的字符串,而删除最后两个字符可能不是你想要的。myString = myString.TrimEnd(vbCr, vbLf) 是一种更可靠的解决方案。 - Mehrdad Afshari
在许多情况下,只需调用TrimEnd()Trim()更好。除了换行符之外,还有很多空白字符,通常您希望摆脱所有尾随/前导空格。通过反射查看列表的随机有趣代码,在.Net 4上进行了测试:char[] whitespace = (char[]) typeof(string).GetField("WhitespaceChars", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); - Brian
@Brian:当然,但你可能实际上想要空格,只需要去掉换行符即可。 - Mehrdad Afshari

4
Dim str As String = "Test" & vbCrLf
str = str.Substring(0, str.Length - vbCrLf.Length)

与 vbCrlf 相同,使用 Environment.NewLine 替代:
str = "Test" & Environment.NewLine
str = str.Substring(0, str.Length - Environment.NewLine.Length)

顺便提一下,它们的区别是:Environment.NewLine 是特定于平台的(例如在其他操作系统中返回不同的字符串)

你的“remove”方法没有起作用,因为你没有将此函数的返回值分配给原始字符串引用:

str = str.Remove(str.Length - Environment.NewLine.Length)

如果您想替换所有换行符:

str = str.Replace(Environment.NewLine, String.Empty)

1

使用:

Dim str As String
str = "cars,cars,cars"
str = str.Remove(str.LastIndexOf(","))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接