2015-12-14 5 views
2

Я столкнулся с одной проблемой, связанной с некоторым значением hexa в строке, мне нужно удалить шестнадцатеричные символы из NSString.Как удалить шестнадцатеричные символы из NSString

Проблема в том, когда я печатаю объект, который он печатает как «BLANK line». И в режиме отладки он показывает: enter image description here

Так как я могу удалить его из строки?

РЕДАКТИРОВАТЬ

Triming пробельные: enter image description here

результат NSLog является:

2015-12-14 15: 37: 10,710 MyApp [2731: 82236] TMP: ''

База данных:

enter image description here

Ранее вопрос: how to detect garbage string value in ios?

+0

[Это] (https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html) будет полезно – NSNoob

+0

, почему отрицательный реп, если вы не можете дайте ответ.? – NetDemo

+0

model.lastupdatedby это строка? –

ответ

2

Поскольку ваш набор данных явно имеет значения мусора, вы можете использовать этот метод для проверки правильности строки. Определите критерии проверки и просто не используйте значения, которые являются мусором. Но, как было предложено ранее gnasher, вам лучше искать ошибку, которая вызывает вставку данных мусора в вашу базу данных. После того, как вы это сделали, проверьте, соответствуют ли входные строки вашим определенным критериям. Если да, сделайте то, что хотите. Если это не так, просто двигайтесь дальше.

-(BOOL) isValidString: (NSString*) input 
{ 
     NSMutableCharacterSet *validSpecialChars = [NSMutableCharacterSet characterSetWithCharactersInString:@"_~.,"];//Add your desired characters here 
     [validSpecialChars formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; 
     return [[input stringByTrimmingCharactersInSet:validSpecialChars] isEqualToString:@""]; 
} 

Если ваша строка будет содержать только определенные символы, она вернет true. Если он содержит любые другие символы (мусор или недействительный), он вернет false.

1

Я не уверен, что именно вы ищете, но если вы хотите, чтобы удалить все управляющие символы затем

string = [[string componentsSeparatedByCharactersInSet:[NSCharacterSet controlCharacterSet]] componentsJoinedByString:@""] 

Если вы должны быть быстрее и уверены, что управляющие символы находятся только в начале и конце строки, тогда

string = [string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]]; 

ПРИМЕЧАНИЕ. Удаление всех управляющих символов приведет к удалению всех новых строк (\n)!


От NSCharacterSet Class Reference:

Эти символы специально дорожит Unicode U + 0000 до U + 001F и U + 007F до U + 009F.

Значимость, с которой вы столкнулись, составляет \x06, что составляет U+0006.


Если вы хотите удалить только \x06, то вы всегда можете создать символы, установленные только для него.

NSCharacterSet *hex6 = [NSCharacterSet characterSetWithCharactersInString:@"\x06"]; 
string = [[string componentsSeparatedByCharactersInSet:hex6] componentsJoinedByString:@""] 
+0

Привет, Jeffery, являются «\ x06» контрольным символом? i dont know other controlCharecters so .. – NetDemo

+0

@NetDemo Я обновил свой ответ. –

1

Во-первых, не доверяйте отладчику Xcode. Распечатайте characterAtIndex: 0, чтобы быть уверенным, что у вас действительно есть то, что вы думаете.

Во-вторых, удаление вещей - все хорошо и хорошо, но вы врачуете с симптомом. Вы действительно должны попытаться выяснить, откуда приходит содержимое _lastUpdatedBy и почему оно такое. У вас может быть серьезная ошибка и попытка ее скрыть. Например, может быть ошибка, которая хранит данные мусора вместо правильных данных, и вы просто прикрываете эту ошибку.

+0

Вы правы. Мне нужно проверить, откуда это значение вставлено неправильно. Я проверю его. Thnks :) – NetDemo

Смежные вопросы