TrimEnd和奇怪的(?)结果

时间:2015-02-13 13:32:49

标签: vb.net trim

我做了这个简单的测试:

   Dim arg1 As String = "TestString1"
   Dim arg2 As String = "String1"
   Dim result As String = arg1.TrimEnd(arg2.ToCharArray())

现在,结果包含“Tes”而不是预期的“Test”。为什么呢?

3 个答案:

答案 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

请注意,targ135中有两个权限。还要注意,所有这些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