使用\ char进行奇怪的TrimEnd行为

时间:2011-04-18 09:29:02

标签: vb.net visual-studio string trim

我正在使用TrimEnd从字符串末尾删除某些字符。最初我认为这会起作用:

    Dim strNew As String = "Employees\Sickness Entitlement.rpt"
    Dim strTrim As String = "Sickness Entitlement.rpt"
    Console.WriteLine(strNew.TrimEnd(strTrim)) '<- Doesn't work

但是TrimEnd仅适用于字符数组或单个字符串,所以我尝试了这个:

    Dim strNew As String = "Employees\Sickness Entitlement.rpt"
    Dim strTrim As String = "Sickness Entitlement.rpt"

    Dim arrChars As Char()
    ReDim arrChars(strTrim.Length)
    For i As Integer = 0 To strTrim.Length - 1
        arrChars(i) = strTrim.Substring(i, 1)
    Next

    Console.WriteLine(strNew.TrimEnd(arrChars)) '<- Employees\

这个工作正常,直到我添加斜杠:

    Dim strNew As String = "Employees\Sickness Entitlement.rpt"
    Dim strTrim As String = "\Sickness Entitlement.rpt"

    Dim arrChars As Char()
    ReDim arrChars(strTrim.Length)
    For i As Integer = 0 To strTrim.Length - 1
        arrChars(i) = strTrim.Substring(i, 1)
    Next

    Console.WriteLine(strNew.TrimEnd(arrChars)) '<- Employ

现在输出:Employ

这是设计的吗?这对我来说似乎很奇怪。我的问题的解决方案是做类似的事情:

    If strNew.EndsWith(strTrim) Then
        Console.WriteLine(strNew.Substring(0, strNew.LastIndexOf(strTrim)))
    End If

这既简单又有效,但上面发生了什么?

2 个答案:

答案 0 :(得分:2)

重新阅读TrimEnd的文件;您使用错误:TrimEnd将从字符串末尾删除数组中的任何字符,只要它仍然找到这样的字符。

例如:

Dim str = "aaebbabab"
Console.WriteLine(str.TrimEnd(new Char() { "a"c, "b"c })

将输出aa,因为它会删除所有尾随的ab

如果您的输入与您的示例完全相同,那么最简单的举措就是使用Substring

Console.WriteLine(strNew.Substring(0, strNew.Length - strTrim.Length))

否则你可以使用正则表达式。

答案 1 :(得分:2)

TrimEnd会删除你给它的所有字符,以任何顺序找到它们,直到它到达不在列表中的字符。

因此当\不在您提供的列表中时,修剪将在\停止。一旦你包含\,修剪删除\然后在字符串末尾看到'ess' - 'e'和's'都已经在你提供的列表中,所以它们会被修剪。

Trim方法完全不适合您要做的事情。如果您正在操作路径,请使用Path.xxx方法。如果你只是试图将字符串分成几个部分,可以使用Split(),或者一些适当的Substring()组合以及你需要找到分裂点的任何东西。