Обрезать пробелы с конца строки NSString
мне нужно удалить пробелы из конца строки. Как я могу это сделать?
Пример: если строка "Hello "
Он должен стать "Hello"
14 ответов:
использовать - stringByTrimmingCharactersInSet:
NSString *string = @" this text has spaces before and after "; NSString *trimmedString = [string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
(это будет обрезать пробелы на обоих концах).
Swift 3
let string = " this text has spaces before and after " let trimmedString = string.trimmingCharacters(in: .whitespacesAndNewlines)
другое решение включает в себя создание изменяемой строки:
//make mutable string NSMutableString *stringToTrim = [@" i needz trim " mutableCopy]; //pass it by reference to CFStringTrimSpace CFStringTrimWhiteSpace((__bridge CFMutableStringRef) stringToTrim); //stringToTrim is now "i needz trim"
здесь вы идете...
- (NSString *)removeEndSpaceFrom:(NSString *)strtoremove{ NSUInteger location = 0; unichar charBuffer[[strtoremove length]]; [strtoremove getCharacters:charBuffer]; int i = 0; for(i = [strtoremove length]; i >0; i--) { NSCharacterSet* charSet = [NSCharacterSet whitespaceCharacterSet]; if(![charSet characterIsMember:charBuffer[i - 1]]) { break; } } return [strtoremove substringWithRange:NSMakeRange(location, i - location)]; }
Так что теперь просто называют его. Предположим, у вас есть строка, которая имеет пробелы спереди и пробелы в конце, и вы просто хотите удалить пробелы в конце, вы можете назвать ее так:
NSString *oneTwoThree = @" TestString "; NSString *resultString; resultString = [self removeEndSpaceFrom:oneTwoThree];
resultString
тогда не будет пробелов в конце.
удалить пробелы из начала и конца строки в Swift:
Swift 3
string.trimmingCharacters(in: .whitespacesAndNewlines)
Предыдущие Версии Swift
string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))
Свифт версия
только обрезает пробелы в конце строки:
private func removingSpacesAtTheEndOfAString(var str: String) -> String { var i: Int = countElements(str) - 1, j: Int = i while(i >= 0 && str[advance(str.startIndex, i)] == " ") { --i } return str.substringWithRange(Range<String.Index>(start: str.startIndex, end: advance(str.endIndex, -(j - i)))) }
обрезает пробелы по обе стороны строки:
var str: String = " Yolo " var trimmedStr: String = str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Это позволит удалить только конечные символы по вашему выбору.
func trimRight(theString: String, charSet: NSCharacterSet) -> String { var newString = theString while String(newString.characters.last).rangeOfCharacterFromSet(charSet) != nil { newString = String(newString.characters.dropLast()) } return newString }
NSString *trimmedString = [string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; //for remove whitespace and new line character NSString *trimmedString = [string stringByTrimmingCharactersInSet: [NSCharacterSet punctuationCharacterSet]]; //for remove characters in punctuation category
есть много других наборов символов. Проверьте это сами в соответствии с вашим требованием.
Быстро
чтобы обрезать пробел и новую строку с обеих сторон строки:
var url: String = "\n http://example.com/xyz.mp4 " var trimmedUrl: String = url.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
простое решение обрезать только один конец вместо обоих концов в objective-c:
@implementation NSString (category) /// trims the characters at the end - (NSString *)stringByTrimmingSuffixCharactersInSet:(NSCharacterSet *)characterSet { NSUInteger i = self.length; while (i > 0 && [characterSet characterIsMember:[self characterAtIndex:i - 1]]) { i--; } return [self substringToIndex:i]; } @end
и симметричная утилита для обрезки только начала:
@implementation NSString (category) /// trims the characters at the beginning - (NSString *)stringByTrimmingPrefixCharactersInSet:(NSCharacterSet *)characterSet { NSUInteger i = 0; while (i < self.length && [characterSet characterIsMember:[self characterAtIndex:i]]) { i++; } return [self substringFromIndex:i]; } @end
Я придумал эту функцию, которая в основном ведет себя аналогично одной в ответе Алекса:
-(NSString*)trimLastSpace:(NSString*)str{ int i = str.length - 1; for (; i >= 0 && [str characterAtIndex:i] == ' '; i--); return [str substringToIndex:i + 1]; }
whitespaceCharacterSet
кроме того, само пространство включает также символ табуляции, который в моем случае не мог появиться. Поэтому я думаю, что простого сравнения может быть достаточно.
решение описано здесь: Как удалить пробелы с правого конца NSString?
добавьте в NSString следующие категории:
- (NSString *)stringByTrimmingTrailingCharactersInSet:(NSCharacterSet *)characterSet { NSRange rangeOfLastWantedCharacter = [self rangeOfCharacterFromSet:[characterSet invertedSet] options:NSBackwardsSearch]; if (rangeOfLastWantedCharacter.location == NSNotFound) { return @""; } return [self substringToIndex:rangeOfLastWantedCharacter.location+1]; // non-inclusive } - (NSString *)stringByTrimmingTrailingWhitespaceAndNewlineCharacters { return [self stringByTrimmingTrailingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; }
и вы используете его так:
[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]
обрезать все трейлинг пробелы (я предполагаю, что это на самом деле ваше намерение), следующее довольно чистый и краткий способ сделать это:
NSString *trimmedString = [string stringByReplacingOccurrencesOfString:@"\s+$" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, string.length)];
одна строка, с тире регулярного выражения.
пусть string = "тестовая обрезанная строка"
для удаления пробелов и новой строки используйте следующий код: -
пусть str_trimmed = yourString.trimmingCharacters(in:.whitespacesAndNewlines)
для удаления только пробелов из строки используйте ниже код: -
пусть str_trimmed = yourString.trimmingCharacters(in:.пробельные символы)