Quiero comprobar si una cadena en particular está formada por espacios. Podría ser cualquier cantidad de espacios, incluido cero. ¿Cuál es la mejor manera de determinar eso?Comprueba si un NSString está formado por espacios
Respuesta
NSString *str = @" ";
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet];
if ([[str stringByTrimmingCharactersInSet: set] length] == 0)
{
// String contains only whitespace.
}
Recorte el espacio y verifique el número de caracteres restantes. Echar un vistazo a este post here
Trate despojándola de espacios y comparándolo con @ "":
NSString *probablyEmpty = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
BOOL wereOnlySpaces = [probablyEmpty isEqualToString:@""];
Prueba esto:
[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
o
[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Este es un método 'NSMutableString'. –
Um, no, no lo es. Devuelve un NSString nuevo y se declara en NSString.h. – picciano
En realidad, no está definido en ninguna parte. –
Aquí es una categoría fácilmente reutilizable en NSString
según la respuesta de @Alexander Akers, pero eso también YES
devuelve si la cadena contiene "nuevas" líneas ...
@interface NSString (WhiteSpaceDetect)
@property (readonly) BOOL isOnlyWhitespace;
@end
@implementation NSString (WhiteSpaceDetect)
- (BOOL) isOnlyWhitespace {
return ![self stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]].length;
}
@end
y para aquellos de ustedes, almas untrusting por ahí ..
#define WHITE_TEST(x) for (id z in x) printf("\"%s\" : %s\n",[z UTF8String], [z isOnlyWhitespace] ? "YES" :"NO")
WHITE_TEST(({ @[
@"Applebottom",
@"jeans\n",
@"\n",
@""
"",
@" \
\
",
@" "
];}));
➜
"Applebottom" : NO
"jeans
" : NO
"
" : YES
"" : YES
" " : YES
" " : YES
Aquí es un simple Solución Swift:
//Check if string contains only empty spaces and new line characters
static func isStringEmpty(#text: String) -> Bool {
let characterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet()
let newText = text.stringByTrimmingCharactersInSet(characterSet)
return newText.isEmpty
}
¿por qué el voto hacia abajo? – Esqarrouth
Aquí está el código de la versión Swift para el mismo,
var str = "Hello World"
if count(str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0 {
// String is empty or contains only white spaces
}
else {
// String is not empty and contains other characters
}
o puede escribir una extensión de cadena sencilla, como a continuación y utilizar el mismo código con una mejor lectura en múltiples lugares.
extension String {
func isEmptyOrContainsOnlySpaces() -> Bool {
return count(self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0
}
}
y simplemente llamarlo usando cualquier cadena como esta,
var str1 = " "
if str.isEmptyOrContainsOnlySpaces() {
// custom code e.g Show an alert
}
Es mucho más rápido para comprobar el rango de caracteres no está en blanco en lugar de recortar toda la cadena.
NSCharacterSet *inverted = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet];
NSRange range = [string rangeOfCharacterFromSet:inverted];
BOOL empty = (range.location == NSNotFound);
Tenga en cuenta que "lleno" es probablemente el caso más común con una combinación de espacios y texto.
testSpeedOfSearchFilled - 0.012 sec
testSpeedOfTrimFilled - 0.475 sec
testSpeedOfSearchEmpty - 1.794 sec
testSpeedOfTrimEmpty - 3.032 sec
Las pruebas se ejecutan en mi iPhone 6+. Código here. Pegue en cualquier subclase XCTestCase.
Esta respuesta es de lejos la mejor. Me sorprendió mucho que mucha gente fuera ciegamente a buscar soluciones. Sin embargo, debe corregir un error tipográfico: si range.location! = NSNotFound significa que ha encontrado un carácter no WS, lo que significa que la cadena no está vacía. Entonces necesitas invertir la condición. – battlmonstr
tiene que usar este código para Swift 3:
func isEmptyOrContainsOnlySpaces() -> Bool {
return self.trimmingCharacters(in: .whitespaces).characters.count == 0
}
Estoy muy sorprendido de que yo soy el primero que sugiere de expresiones regulares
NSString *string = @" ";
NSString *pattern = @"^\\s*$";
NSRegularExpression *expression = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
NSArray *matches = [expression matchesInString:string options:0 range:NSMakeRange(0, string.length)];
BOOL isOnlyWhitespace = matches.count;
O en Swift:
let string = " "
let pattern = "^\\s*$"
let expression = try! NSRegularExpression(pattern:pattern, options:[])
let matches = expression.matches(in: string, options: [], range:NSRange(location: 0, length: string.utf16.count))
let isOnlyWhitespace = !matches.isEmpty
- 1. Comprueba si el archivo remoto está bien formado XML con PHP
- 2. Comprueba si UIWebView está cargado
- 3. Comprueba si un BSTR está vacío
- 4. ¿Cómo determinar si XML está bien formado?
- 5. Comprueba si el atributo CoreData está vacío
- 6. ¿Comprueba si IIS está instalado o no?
- 7. Comprueba si el intento uri está disponible
- 8. VB Comprueba si int está vacío
- 9. Comprueba si una constante ya está definida
- 10. Comprueba si html 5 shim está cargado
- 11. ¿Comprueba si Mouse LButton está inactivo?
- 12. Comprueba si se está ejecutando un archivo exe específico
- 13. NSString está vacío
- 14. Comprueba si un complemento de Firefox 3.5 está habilitado
- 15. Cómo determinar si NSString está vacío
- 16. ¿Comprueba el XML bien formado sin try/catch?
- 17. Comprueba si un CALayer ya está agregado como una subcapa
- 18. Comprueba si un elemento DOM dado está listo
- 19. Comprueba si un valor está en una colección con LINQ
- 20. Cómo rellenar NSString con espacios?
- 21. ¿Cómo determinar si un NSString está basado en latin?
- 22. Comprueba si un archivo no está abierto (no usado por otro proceso) en Python
- 23. ¿Detecta si un NSString contiene ...?
- 24. Si se comprueba nulo
- 25. php: comprueba si cierto elemento de una matriz está vacío
- 26. Comprueba si el puerto en serie está escuchando
- 27. ¿Por qué está mal formado tener funciones constexpr multilínea?
- 28. Comprueba si la pestaña actual está vacía en vim
- 29. Split NSString por el número de espacios en blanco
- 30. Comprueba si hay un paquete instalado
Dependiendo de la situación, es posible que desee utilizar 'whitespaceAndNewlineCharacterSet' en lugar de exactamente lo que dice en la lata). – BoltClock