Удалите все пробелы из NSString
Я пытаюсь избавиться от белых пробелов в NSString
, но ни один из методов, которые я пробовал, не работал.
У меня есть "this is a test"
, и я хочу получить "thisisatest"
.
Я использовал whitespaceCharacterSet
, который должен исключать пробелы.
NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
но я продолжал получать ту же строку с пробелами. Любые идеи?
Ответы
Ответ 1
stringByTrimmingCharactersInSet
удаляет только символы из начала и конца строки, а не из середины.
1) Если вам нужно удалить из строки только данный символ (например, символ пробела), используйте:
[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]
2) Если вам действительно нужно удалить набор символов (а именно не только символ пробела, но и любой пробельный символ, например пробел, вкладку, нерушимое пространство и т.д.), вы можете разделить строку используя whitespaceCharacterSet
, затем снова присоединяя слова к одной строке:
NSArray* words = [yourString componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString* nospacestring = [words componentsJoinedByString:@""];
Обратите внимание, что это последнее решение имеет то преимущество, что обрабатывает каждый пробельный символ, а не только пробелы, но немного менее эффективен, чем stringByReplacingOccurrencesOfString:withString:
. Поэтому, если вам действительно нужно удалить символ пробела и убедитесь, что у вас не будет другого символа пробела, чем простое пространство char, используйте первый метод.
Ответ 2
Я предпочитаю использовать регулярное выражение следующим образом:
NSString *myString = @"this is a test";
NSString *myNewString = [myString stringByReplacingOccurrencesOfString:@"\\s"
withString:@""
options:NSRegularExpressionSearch
range:NSMakeRange(0, [myStringlength])];
//myNewString will be @"thisisatest"
Вы можете сделать себе категорию на NSString, чтобы сделать жизнь еще проще:
- (NSString *) removeAllWhitespace
{
return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
options:NSRegularExpressionSearch
range:NSMakeRange(0, [self length])];
}
Вот и метод unit test:
- (void) testRemoveAllWhitespace
{
NSString *testResult = nil;
NSArray *testStringsArray = @[@""
,@" "
,@" basicTest "
,@" another Test \n"
,@"a b c d e f g"
,@"\n\tA\t\t \t \nB \f C \t ,d,\ve F\r\r\r"
,@" landscape, portrait, ,,,up_side-down ;asdf; lkjfasdf0qi4jr0213 ua;;;;[email protected]@##$$ %^^ & * * ()+ + "
];
NSArray *expectedResultsArray = @[@""
,@""
,@"basicTest"
,@"anotherTest"
,@"abcdefg"
,@"ABC,d,eF"
,@"landscape,portrait,,,,up_side-down;asdf;lkjfasdf0qi4jr0213ua;;;;[email protected]@##$$%^^&**()++"
];
for (int i=0; i < [testStringsArray count]; i++)
{
testResult = [testStringsArray[i] removeAllWhitespace];
STAssertTrue([testResult isEqualToString:expectedResultsArray[i]], @"Expected: \"%@\" to become: \"%@\", but result was \"%@\"",
testStringsArray[i], expectedResultsArray[i], testResult);
}
}
Ответ 3
Простая задача с помощью stringByReplacingOccurrencesOfString
NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];
Ответ 4
Это может помочь вам, если вы столкнулись с \u00a0
вместо
(пробелы). У меня была эта проблема, когда я пытался извлечь телефонные номера телефонов. Мне нужно было изменить строку phoneNumber, чтобы в нем не было пробелов.
NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];
Когда yourString
был текущим номером телефона.
Ответ 5
stringByReplacingOccurrencesOfString заменит все пробелы в строке, а не только начальный и конечный
Использование
[YourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]
Ответ 6
Это для удаления любого пространства, которое появляется, когда вы получаете текст из любого текстового поля, но если вы хотите удалить пробел между строкой, вы можете использовать
xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];
Он заменит пустое пространство без пробела, и пустое поле позаботится ниже:
searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Ответ 7
Это для меня лучший способ SWIFT
let myString = " ciao \n ciao "
var finalString = myString as NSString
for character in myString{
if character == " "{
finalString = finalString.stringByReplacingOccurrencesOfString(" ", withString: "")
}else{
finalString = finalString.stringByReplacingOccurrencesOfString("\n", withString: "")
}
}
println(finalString)
и результат: ciaociao
Но это трюк!
extension String {
var NoWhiteSpace : String {
var miaStringa = self as NSString
if miaStringa.containsString(" "){
miaStringa = miaStringa.stringByReplacingOccurrencesOfString(" ", withString: "")
}
return miaStringa as String
}
}
let myString = "Ciao Ciao Ciao".NoWhiteSpace //CiaoCiaoCiao
Ответ 8
- (NSString *)removeWhitespaces {
return [[self componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]]
componentsJoinedByString:@""];
}
Ответ 9
Используйте ниже marco и удалите пробел.
#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
в другом запросе файла TRIM:
NSString *strEmail;
strEmail = TRIM(@" this is the test.");
Пусть это поможет вам...
Ответ 10
pStrTemp = [pStrTemp stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Ответ 11
Я настоятельно рекомендую разместить это в вашем проекте:
extension String {
func trim() -> String {
return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
}
func trim(withSet: NSCharacterSet) -> String {
return self.stringByTrimmingCharactersInSet(withSet)
}
}