我正在使用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
这既简单又有效,但上面发生了什么?
答案 0 :(得分:2)
重新阅读TrimEnd
的文件;您使用错误:TrimEnd
将从字符串末尾删除数组中的任何字符,只要它仍然找到这样的字符。
例如:
Dim str = "aaebbabab"
Console.WriteLine(str.TrimEnd(new Char() { "a"c, "b"c })
将输出aa
,因为它会删除所有尾随的a
和b
。
如果您的输入与您的示例完全相同,那么最简单的举措就是使用Substring
:
Console.WriteLine(strNew.Substring(0, strNew.Length - strTrim.Length))
否则你可以使用正则表达式。
答案 1 :(得分:2)
TrimEnd会删除你给它的所有字符,以任何顺序找到它们,直到它到达不在列表中的字符。
因此当\不在您提供的列表中时,修剪将在\停止。一旦你包含\,修剪删除\然后在字符串末尾看到'ess' - 'e'和's'都已经在你提供的列表中,所以它们会被修剪。
Trim方法完全不适合您要做的事情。如果您正在操作路径,请使用Path.xxx方法。如果你只是试图将字符串分成几个部分,可以使用Split(),或者一些适当的Substring()组合以及你需要找到分裂点的任何东西。