Есть ли лучший способ обрезать пробелы и другие символы из строки?

88
6

Например, если я хочу удалить пробельные и конечные запятые из строки, я могу сделать это:


String x = "abc,\n";
x.Trim().Trim(new char[] { ',' });

который выводит abc правильно. Я мог бы легко обернуть это методом расширения, но мне интересно, есть ли встроенный способ сделать это с помощью одного вызова Trim(), который мне не хватает. Я привык к Python, где я мог бы это сделать:


import string
x = "abc,\n"

x.strip(string.whitespace + ",")


В документации указано, что все символы Unicode whitespace, за исключением нескольких исключений (см. раздел Заметки для вызывающих абонентов), но мне интересно, есть ли способ сделать это без ручного определения массива символов в методе расширения.


Есть ли встроенный способ сделать это? Количество символов без пробелов, которые я хочу удалить, может отличаться и не обязательно будет содержать запятые, и я хочу удалить все пробелы, а не только \n.

спросил(а) 2021-01-25T17:27:53+03:00 4 месяца, 4 недели назад
1
Решение
99

Да, вы можете сделать это:


x.Trim(new char[] { '\n', '\t', ' ', ',' });

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


ИЗМЕНИТЬ


.NET 4.0 использует этот метод, чтобы определить, считается ли символ пробелом. Более ранние версии содержат внутренний список символов пробелов (Источник).

Если вы действительно хотите использовать только один вызов Trim, ваше приложение может сделать следующее:


    При запуске сканируйте диапазон символов пробела Unicode, вызывая Char.IsWhiteSpace для каждого символа.
    Если вызов метода возвращает true, затем нажмите символ на массив.
    Добавьте ваши собственные символы в массив, а также

Теперь вы можете использовать один вызов Trim, передав массив, который вы создали.


Я предполагаю, что Char.IsWhiteSpace зависит от текущей локали, поэтому вам нужно будет уделять пристальное внимание языку.

ответил(а) 2021-01-25T17:27:53+03:00 4 месяца, 4 недели назад
99

Использование regex делает это простым:


text = Regex.Replace(text, @"^[\s,]+|[\s,]+$", "");

Это будет соответствовать символам пробела Unicode.

ответил(а) 2021-01-25T17:27:53+03:00 4 месяца, 4 недели назад
63

У вас может быть следующий метод расширения полосы


public static class ExtensionMethod
{
public static string Strip(this string str, char[] otherCharactersToRemove)
{
List<char> charactersToRemove = (from s in str
where char.IsWhiteSpace(s)
select s).ToList();
charactersToRemove.AddRange(otherCharactersToRemove);
string str2 = str.Trim(charactersToRemove.ToArray());
return str2;
}
}

И тогда вы можете называть его так:


static void Main(string[] args)
{
string str = "abc\n\t\r\n , asdfadf , \n \r \t";
string str2 = str.Strip(new char[]{','});
}

Вывод:


str2 = "abc\n\t\r\n ,  asdfadf"

Метод Strip Extension сначала получит все символы WhiteSpace из строки в списке. Добавьте другие символы, которые нужно удалить в списке, а затем нарисуйте обрезку.

ответил(а) 2021-01-25T17:27:53+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема