Necesito eliminar espacios del final de una cadena. ¿Cómo puedo hacer eso? Ejemplo: si la cadena es "Hello "
, debe convertirse"Hello"
Necesito eliminar espacios del final de una cadena. ¿Cómo puedo hacer eso? Ejemplo: si la cadena es "Hello "
, debe convertirse"Hello"
Respuestas:
Tomado de esta respuesta aquí: https://stackoverflow.com/a/5691567/251012
- (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
}
whitespaceAndNewlineCharacterSet
.
Otra solución implica crear una cadena mutable:
//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"
Aqui tienes...
- (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)];
}
Así que ahora solo llámalo. Supongamos que tiene una cadena que tiene espacios en el frente y espacios en el extremo y solo desea eliminar los espacios en el extremo, puede llamarlo así:
NSString *oneTwoThree = @" TestString ";
NSString *resultString;
resultString = [self removeEndSpaceFrom:oneTwoThree];
resultString
entonces no tendrá espacios al final.
Para eliminar espacios en blanco solo desde el principio y el final de una cadena en Swift:
string.trimmingCharacters(in: .whitespacesAndNewlines)
string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))
stringByTrimmigCharactersInSet:
- "Devuelve una nueva cadena hecha al eliminar de ambos extremos de los caracteres del receptor contenidos en un conjunto de caracteres dado". developer.apple.com/reference/foundation/nsstring/…
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
Hay muchos otros juegos de caracteres. Compruébelo usted mismo según sus requisitos.
Versión rápida
Solo recorta espacios al final de la cadena:
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))))
}
Recorta los espacios a ambos lados de la cadena:
var str: String = " Yolo "
var trimmedStr: String = str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Esto eliminará solo los caracteres finales de su elección.
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
}
Una solución simple para recortar solo un extremo en lugar de ambos extremos en 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
Y una utilidad simétrica para recortar solo el principio:
@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
Para recortar todos los caracteres de espacio en blanco finales (supongo que eso es realmente su intención), la siguiente es una forma bastante limpia y concisa de hacerlo.
Swift 5:
let trimmedString = string.replacingOccurrences(of: "\\s+$", with: "", options: .regularExpression)
C objetivo:
NSString *trimmedString = [string stringByReplacingOccurrencesOfString:@"\\s+$" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, string.length)];
Una línea, con una pizca de expresión regular.
La solución se describe aquí: ¿Cómo eliminar espacios en blanco del extremo derecho de NSString?
Agregue las siguientes categorías a 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]];
}
Y lo usas como tal:
[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]
Se me ocurrió esta función, que básicamente se comporta de manera similar a una en la respuesta de Alex:
-(NSString*)trimLastSpace:(NSString*)str{
int i = str.length - 1;
for (; i >= 0 && [str characterAtIndex:i] == ' '; i--);
return [str substringToIndex:i + 1];
}
whitespaceCharacterSet
además del espacio en sí incluye también el carácter de tabulación, que en mi caso no podría aparecer. Así que supongo que una comparación simple podría ser suficiente.
let string = "Probar cadena recortada"
Para eliminar el espacio en blanco y la nueva línea, utilice el siguiente código: -
let str_trimmed = yourString.trimmingCharacters (en: .whitespacesAndNewlines)
Para eliminar solo los espacios de la cadena, use el siguiente código: -
let str_trimmed = yourString.trimmingCharacters (en: .whitespaces)
NSString* NSStringWithoutSpace(NSString* string)
{
return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}