【问题标题】:TrimEnd and strange(?) result [duplicate]TrimEnd 和奇怪的(?)结果 [重复]
【发布时间】:2015-04-14 13:35:29
【问题描述】:

我做了这个简单的测试:

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

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

【问题讨论】:

标签: vb.net trim


【解决方案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

【讨论】:

    【解决方案2】:

    MSDN article所述:

    TrimEnd 方法从当前字符串中删除 trimChars 参数中的所有尾随字符。当在字符串末尾遇到不在 trimChars 中的第一个字符时,修剪操作停止。例如,如果当前字符串是“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字,则 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
    

    【讨论】:

      【解决方案3】:

      因为它没有与arg2 作为一个整体进行修剪;它遍历arg2 的每个单独字符并分别对其进行修剪:

      character:        S     t    r  i  n  g  1
      indeces in arg1:  4  (3, 5)  2  3  4  5  6
      

      请注意,targ135 中有两个索引。另请注意,所有这些索引都与字符串的末尾是连续的;如果没有与索引 4 ("S"c) 处的字符匹配,则链将被破坏,因此,t 将仅匹配位置 5 处的字符。

      所以,如果你把arg 的字符去掉[3-6],剩下的就是[0-2] 的字符:

      Tes
      

      【讨论】:

        猜你喜欢
        • 2011-08-04
        • 2020-10-22
        • 1970-01-01
        • 2011-08-07
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多