我做了这个简单的测试:
Dim arg1 As String = "TestString1"
Dim arg2 As String = "String1"
Dim result As String = arg1.TrimEnd(arg2.ToCharArray())
现在,结果包含“Tes”而不是预期的“Test”。为什么呢?
答案 0 :(得分:2)
正如MSDN article所说:
TrimEnd方法从当前字符串中删除trimChars参数中的所有尾随字符。当在字符串末尾遇到不在trimChars中的第一个字符时,修剪操作将停止。例如,如果当前字符串是" 123abc456xyz789"和trimChars包含来自" 1"的数字。通过" 9&#34 ;, TrimEnd方法返回" 123abc456xyz"。
由于这封信" t"是你告诉它删除的字符之一,它正在这样做。当它到达" s"时停止,因为那不是你要删除的字符之一。
要做你想要的目标,你可以做这样的事情:
Dim arg1 As String = "TestString1"
Dim arg2 As String = "String1"
If arg1.EndsWith(arg2) Then
Dim result As String = arg1.Substring(0, arg1.Length - arg2.Length)
End If
答案 1 :(得分:2)
因为它并没有整合arg2
;它遍历arg2
的每个字符,并单独修剪:
character: S t r i n g 1
indeces in arg1: 4 (3, 5) 2 3 4 5 6
请注意,t
在arg1
,3
和5
中有两个权限。还要注意,所有这些indeces都是从字符串的末尾开始连续的;如果没有任何内容与索引4
("S"c
)中的字符匹配,则链条会被破坏,因此t
只匹配位置{{1}处的字符}。
因此,如果您在5
处取出arg
的字符,那么您剩下的就是[3-6]
处的内容:
[0-2]
答案 2 :(得分:1)
您正在呼叫TrimEnd
,并接受params char[]
作为输入,因此与此相同:
Dim result As String = "TestString1".TrimEnd("S"c,"t"c,"r"c,"i"c,"n"c,"g"c,"1"c)
从字符串末尾删除所有这些字符,包括t
。
C#(在这种情况下更具可读性):
string result = "TestString1".TrimEnd('S','t','r','i','n','g','1');
如果要从第一个字符串的末尾删除整个字符串,请使用IndexOf
+ Substring
:
Dim index As Int32 = arg1.IndexOf("String1")
If index >= 0 Then
Dim result As String = arg1.Substring(0, index) ' Test
End If