Странное поведение TrimEnd с \ char - PullRequest
1 голос
/ 18 апреля 2011

Я использую 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)) '<- Employ

Это теперь выводит: Employ

Это как-то задумано?Это кажется странным для меня.Решение моей проблемы - сделать что-то вроде:

    If strNew.EndsWith(strTrim) Then
        Console.WriteLine(strNew.Substring(0, strNew.LastIndexOf(strTrim)))
    End If

Что проще и работает, но что происходит выше?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

TrimEnd удаляет все символы, которые вы ему даете, в любом порядке находит их , пока не доберется до символа, которого нет в списке.список, который вы предоставляете, обрезка останавливается на \.Как только вы включите \, отделка удаляет \ и затем видит 'ess' в конце строки - и 'e', ​​и 's' уже есть в списке, который вы указали, поэтому они обрезаются.* Методы обрезки совершенно не подходят для того, что вы пытаетесь сделать.Если вы управляете путями, используйте методы Path.xxx.Если вы просто пытаетесь разделить строки на разделы, используйте либо Split (), либо некоторую подходящую комбинацию Substring () и все, что вам нужно, чтобы найти точку разделения.

2 голосов
/ 18 апреля 2011

Перечитайте документацию 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))

В противном случае вы можете прибегнуть к регулярным выражениям.

...