如何从 NSString 中删除十六进制字符
How to remove hexadecimal characters from NSString
我面临一个与字符串中的某些十六进制值相关的问题,我需要从 NSString 中删除十六进制字符。
问题是当我打印对象时它打印为 "BLANK line"。在调试模式下,它显示为:
那么我怎样才能将它从字符串中删除呢?
编辑
修剪空白:
NSLog 的结果是:
2015-12-14 15:37:10.710 MyApp [2731:82236] tmp :''
数据库:
之前的问题:
how to detect garbage string value in ios?
我不确定你在找什么,但如果你想删除所有控制字符,那么
string = [[string componentsSeparatedByCharactersInSet:[NSCharacterSet controlCharacterSet]] componentsJoinedByString:@""]
如果您需要更快并且确定控制字符仅位于字符串的开头和结尾,那么
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];
注意:删除所有控制字符将删除所有新行 (\n
)!
来自NSCharacterSet Class Reference:
These characters are specifically the Unicode values U+0000 to U+001F and U+007F to U+009F.
您遇到问题的值是 \x06
,即 U+0006
。
如果您只想删除 \x06
,那么您可以随时为其创建一个字符集。
NSCharacterSet *hex6 = [NSCharacterSet characterSetWithCharactersInString:@"\x06"];
string = [[string componentsSeparatedByCharactersInSet:hex6] componentsJoinedByString:@""]
由于您的数据集明显有垃圾值,您可以使用此方法检查您的字符串是否有效。定义您的验证标准,不要接受垃圾值。但正如 gnasher 之前所建议的那样,您应该查找导致在数据库中插入垃圾数据的错误。完成后,检查输入字符串是否符合您定义的条件。如果是这样,做你想做的。如果没有,请继续前进。
-(BOOL) isValidString: (NSString*) input
{
NSMutableCharacterSet *validSpecialChars = [NSMutableCharacterSet characterSetWithCharactersInString:@"_~.,"];//Add your desired characters here
[validSpecialChars formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
return [[input stringByTrimmingCharactersInSet:validSpecialChars] isEqualToString:@""];
}
如果您的字符串将只包含您定义的字符,它将 return 为真。如果它包含任何其他字符(垃圾或无效),它将 return false。
首先,不要相信 Xcode 调试器。打印 characterAtIndex:0 以确保您确实拥有您认为拥有的东西。
其次,删除内容固然好,但你是在治标不治本。您真的应该尝试找出 _lastUpdatedBy 的内容从何而来以及为什么它是这样的。你可能在这里有一个严重的错误并试图掩盖它。例如,可能存在存储垃圾数据而不是正确数据的错误,而您只是在掩盖该错误。
我面临一个与字符串中的某些十六进制值相关的问题,我需要从 NSString 中删除十六进制字符。
问题是当我打印对象时它打印为 "BLANK line"。在调试模式下,它显示为:
那么我怎样才能将它从字符串中删除呢?
编辑
修剪空白:
NSLog 的结果是:
2015-12-14 15:37:10.710 MyApp [2731:82236] tmp :''
数据库:
之前的问题: how to detect garbage string value in ios?
我不确定你在找什么,但如果你想删除所有控制字符,那么
string = [[string componentsSeparatedByCharactersInSet:[NSCharacterSet controlCharacterSet]] componentsJoinedByString:@""]
如果您需要更快并且确定控制字符仅位于字符串的开头和结尾,那么
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];
注意:删除所有控制字符将删除所有新行 (\n
)!
来自NSCharacterSet Class Reference:
These characters are specifically the Unicode values U+0000 to U+001F and U+007F to U+009F.
您遇到问题的值是 \x06
,即 U+0006
。
如果您只想删除 \x06
,那么您可以随时为其创建一个字符集。
NSCharacterSet *hex6 = [NSCharacterSet characterSetWithCharactersInString:@"\x06"];
string = [[string componentsSeparatedByCharactersInSet:hex6] componentsJoinedByString:@""]
由于您的数据集明显有垃圾值,您可以使用此方法检查您的字符串是否有效。定义您的验证标准,不要接受垃圾值。但正如 gnasher 之前所建议的那样,您应该查找导致在数据库中插入垃圾数据的错误。完成后,检查输入字符串是否符合您定义的条件。如果是这样,做你想做的。如果没有,请继续前进。
-(BOOL) isValidString: (NSString*) input
{
NSMutableCharacterSet *validSpecialChars = [NSMutableCharacterSet characterSetWithCharactersInString:@"_~.,"];//Add your desired characters here
[validSpecialChars formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
return [[input stringByTrimmingCharactersInSet:validSpecialChars] isEqualToString:@""];
}
如果您的字符串将只包含您定义的字符,它将 return 为真。如果它包含任何其他字符(垃圾或无效),它将 return false。
首先,不要相信 Xcode 调试器。打印 characterAtIndex:0 以确保您确实拥有您认为拥有的东西。
其次,删除内容固然好,但你是在治标不治本。您真的应该尝试找出 _lastUpdatedBy 的内容从何而来以及为什么它是这样的。你可能在这里有一个严重的错误并试图掩盖它。例如,可能存在存储垃圾数据而不是正确数据的错误,而您只是在掩盖该错误。