Сокращение и удаление символов из строк в .NET
При разборе предложения на отдельные слова может оказаться, что в начале или в конце некоторых слов стоят пробелы. В этом случае можно воспользоваться методами сокращения в классе System.String, чтобы удалить любое количество пробелов или других символов из указанной позиции в строке. В таблице ниже описаны доступны методы сокращения.
| Имя метода | Использовать |
|---|---|
| String.Trim | Удаление пробелов или знаков, указанных в массиве знаков, из начала и конца строки. |
| String.TrimEnd | Удаление символов, указанных в массиве символов, в конце строки. |
| String.TrimStart | Удаление символов, указанных в массиве символов, в начале строки. |
| String.Remove | Удаление указанного количества символов в указанной позиции индекса в строке. |
Простой способ удалить пробелы с обоих концов строки — метод String.Trim, использование которого показано в следующем примере.
Кроме того, можно удалить символы, указанные в массиве знаков, из начала и конца строки. В следующем примере удаляются символы пробелов, точки и звездочки.
TrimEnd
Метод String.TrimEnd удаляет символы в конце строки, создавая новый строковый объект. Для указания символов, которые следует удалять, в этот метод передается массив символов. Порядок элементов в массиве символов не влияет на выполнение операции сокращения. В случае обнаружения символа, который отсутствует в массиве, операция останавливается.
Ниже приведен пример удаления последних букв строки с помощью метода TrimEnd. В этом примере положение символов ‘r’ и ‘W’ изменено для иллюстрации того, что порядок символов в массиве не имеет значения. Обратите внимание, что этот код удаляет последнее слово MyString и часть первого.
Этот код выводит на консоль значение He .
Ниже приведен пример удаления последнего слова строки с помощью метода TrimEnd. В этом коде после слова Hello следует запятая, а поскольку запятая не указана в массиве символов для сокращения, то выполнение операции прекращается на запятой.
Этот код выводит на консоль значение Hello, .
TrimStart
Метод String.TrimStart аналогичен методу String.TrimEnd за исключением того, что он создает новую строку путем удаления знаков в начале существующего строкового объекта. Для указания символов, которые следует удалять, в метод TrimStart передается массив символов. Как и в случае с методом TrimEnd, порядок элементов в массиве символов не влияет на выполнение операции сокращения. В случае обнаружения символа, который отсутствует в массиве, операция останавливается.
В следующем примере удаляется первое слово в строке. В этом примере положение символов ‘l’ и ‘H’ изменено для иллюстрации того, что порядок символов в массиве не имеет значения.
Этот код выводит на консоль значение World! .
Удалить
Метод String.Remove удаляет указанное количество знаков, начиная с указанного места в существующей строке. Этот метод подразумевает, что отсчет индекса начинается с нуля.
В следующем примере из строки удаляется десять символов, начиная с пятой позиции отсчитываемого от нуля индекса строки.
Trim function in C
I am trying to write an idiomatic trim function in C. How does this look? Should I instead malloc the new string and return it?
3 Answers 3
As @JeffMercado pointed out, this removes spaces instead of trimming leading and trailing spaces. Assuming you want to keep the current functionality, let’s call it remove_spaces .
There’s a really subtle bug here:
isspace takes the value of an unsigned char or EOF . Passing it a char , which is usually signed, will produce undefined behavior. Instead, say:
Another bug: you don’t emit a NUL terminator, meaning the caller would have no way of knowing how long the string is (unless it zeroed out the buffer before calling your function).
Fixing these bugs gives us:
@JeffMercado also said this function is vulnerable to buffer overflow. In a sense, this is not true, provided the caller knows to allocate a buffer of at least strlen(input) + 1 . But the caller might be lazy and just say char result[100] . Adding an output buffer size parameter will likely guard against such a mistake:
See if you can implement this. Some things to bear in mind:
Don’t forget about the NUL terminator when checking the output buffer size.
Don’t be like strncpy and omit the NUL terminator when you have to truncate the string, as it can lead to subtle bugs.
If you use int for i and j and size_t for output_size , you should get compiler warnings about comparison between signed and unsigned. If you don’t, turn up your compiler warnings. If you’re using GCC from the command line, get in the habit of typing gcc -Wall -W .
C# | Trim() Method
C# Trim() is a string method. This method is used to removes all leading and trailing white-space characters from the current String object. This method can be overloaded by passing arguments to it.
Syntax:
Explanation : First method will not take any parameter and the second method will take an array of Unicode characters or null as a parameter. Null is because of params keyword. The type of Trim() method is System.String.
Note: If no parameter is pass in public string Trim() then Null , TAB, Carriage Return and White Space will automatically remove if they are present in current string object. And If any parameter will pass into the Trim() method then only specified character(which passed as arguments in Trim() method) will be removed from the current string object. Null, TAB, Carriage Return, and White Space will not remove automatically if they are not specified in the arguments list.
Below are the programs to demonstrate the above method :
-
Example 1: Program to demonstrate the public string Trim() method. The Trim method removes all leading and trailing white-space characters from the current string object. Each leading and trailing trim operation stops when a non-white-space character is encountered. For example, If current string is ” abc xyz ” and then Trim method returns “abc xyz”.