Почему функция TrimEnd () в C # ведет себя следующим образом? - PullRequest
0 голосов
/ 23 апреля 2019

Фрагмент простого кода выглядит следующим образом:

public static void Main()
{
    string str = "IsRecorded<code>0</code>";
    str = str.TrimEnd("<code>0</code>".ToCharArray());
    Console.WriteLine(str);
}

Выходная строка, которую я получаю, - IsRecor.Почему функция TrimEnd извлекает ded из строки, когда предполагается, что она только <code>0.Кроме того, если я уменьшу str до IsRec, тогда получится IsR в качестве вывода.Почему это происходит?

Ответы [ 4 ]

6 голосов
/ 23 апреля 2019

Параметр для TrimEnd указывает набор символов , который необходимо обрезать. Это не должен быть суффикс для обрезки.

То есть вы хотите обрезать любой символ в наборе { '<', 'c', 'o', 'd', 'e', '>', '0', '/' }. Буквы "дед" все в этом наборе, поэтому они обрезаются.

Если вы хотите удалить суффикс, не используйте TrimEnd. Используйте что-то вроде этого:

public static string RemoveSuffix(string input, string suffix) =>
    input.EndsWith(suffix, StringComparison.Ordinal)
        ? input.Substring(0, input.Length - suffix.Length)
        : input;

(Часть сравнения строк важна, чтобы в некоторых случаях избежать «интересных» специфических для культуры эффектов. По сути, она обеспечивает максимально простое сопоставление.)

1 голос
/ 23 апреля 2019

Вы можете использовать .LastIndexOf() & Remove() для удаления строки, которая находится в конце

string str = "IsRecorded<code>0</code>";
str = str.Remove(str.LastIndexOf("<code>0</code>"));

.LastIndexOf (строковый параметр): найдет индекс последнего вхождения указанной строки.

.Remove (int startIndex): удалить строку из заданного индекса

0 голосов
/ 23 апреля 2019

Другое решение может быть:

string str = "IsRecorded<code>0</code>";
str = str.Replace("<code>0</code>", "");
Console.WriteLine(str);

PS: я знаю, что не будет обрезать только конечную часть, но если это не проблема, то ее можно использовать

0 голосов
/ 23 апреля 2019

Попробуйте вместо этого:

        string str = "IsRecorded<code>0</code>";
        str = str.Substring(0, str.IndexOf("<code>0</code>"));
        Console.WriteLine(str);
...