TrimEnd 和奇怪的(?)结果
TrimEnd and strange(?) result
我做了这个简单的测试:
Dim arg1 As String = "TestString1"
Dim arg2 As String = "String1"
Dim result As String = arg1.TrimEnd(arg2.ToCharArray())
现在,结果包含 "Tes" 而不是预期的 "Test"。为什么?
您正在调用 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
如MSDN article所述:
The TrimEnd method removes from the current string all trailing characters that are in the trimChars parameter. The trim operation stops when the first character that is not in trimChars is encountered at the end of the string. For example, if the current string is "123abc456xyz789" and trimChars contains the digits from "1" through "9", the TrimEnd method returns "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
因为它不trim和arg2
作为一个整体;它分别遍历 arg2
和 trim 的每个单独字符:
character: S t r i n g 1
indeces in arg1: 4 (3, 5) 2 3 4 5 6
注意 t
在 arg1
、3
和 5
中有两个索引。另请注意,所有这些索引从字符串的末尾开始都是连续的;如果没有匹配索引 4
处的字符("S"c
),链就会被破坏,因此,t
将只匹配位置 [=17= 处的字符].
所以如果你在索引 [3-6]
中取出 arg
的字符,你剩下的就是 [0-2]
:
中的字符
Tes
我做了这个简单的测试:
Dim arg1 As String = "TestString1"
Dim arg2 As String = "String1"
Dim result As String = arg1.TrimEnd(arg2.ToCharArray())
现在,结果包含 "Tes" 而不是预期的 "Test"。为什么?
您正在调用 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
如MSDN article所述:
The TrimEnd method removes from the current string all trailing characters that are in the trimChars parameter. The trim operation stops when the first character that is not in trimChars is encountered at the end of the string. For example, if the current string is "123abc456xyz789" and trimChars contains the digits from "1" through "9", the TrimEnd method returns "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
因为它不trim和arg2
作为一个整体;它分别遍历 arg2
和 trim 的每个单独字符:
character: S t r i n g 1
indeces in arg1: 4 (3, 5) 2 3 4 5 6
注意 t
在 arg1
、3
和 5
中有两个索引。另请注意,所有这些索引从字符串的末尾开始都是连续的;如果没有匹配索引 4
处的字符("S"c
),链就会被破坏,因此,t
将只匹配位置 [=17= 处的字符].
所以如果你在索引 [3-6]
中取出 arg
的字符,你剩下的就是 [0-2]
:
Tes