【问题标题】:How to remove hexadecimal characters from NSString如何从 NSString 中删除十六进制字符
【发布时间】:2016-03-19 18:18:16
【问题描述】:

我面临一个与字符串中的一些十六进制值相关的问题,我需要从 NSString 中删除十六进制字符。

问题是当我打印对象时它打印为“空白行”。在调试模式下,它显示为:

那么我怎样才能从字符串中删除它呢?

编辑

修剪空白:

NSLog 的结果是:

2015-12-14 15:37:10.710 MyApp [2731:82236] tmp :''

数据库:

之前的问题: how to detect garbage string value in ios?

【问题讨论】:

  • This 会有所帮助
  • 如果你不能给出答案,为什么要否定代表?
  • model.lastupdatedby 是字符串吗?
  • 是的,但显示为一些标记指针字符串
  • @NetDemo 您能分享一下您是如何创建该字符串的吗?我认为您正在复制其他字符串

标签: ios objective-c nsstring hex


【解决方案1】:

由于您的数据集显然有垃圾值,您可以使用此方法检查您的字符串是否有效。定义您的验证标准,不要接受那些垃圾的值。但正如 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。

【讨论】:

    【解决方案2】:

    我不确定您要查找的确切内容,但如果您想删除所有控制字符,那么

    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:@""]
    

    【讨论】:

    • 嗨 Jeffery,是 "\x06" 控制字符吗?我不知道其他 controlCharecters 所以..
    【解决方案3】:

    首先,不要相信 Xcode 调试器。打印 characterAtIndex:0 以确保您确实拥有您认为拥有的东西。

    其次,删除内容固然很好,但你是在用一种症状来解决问题。您真的应该尝试弄清楚 _lastUpdatedBy 的内容来自哪里以及为什么会这样。你可能有一个严重的错误并试图掩盖它。例如,可能存在存储垃圾数据而不是正确数据的错误,而您只是在掩盖该错误。

    【讨论】:

    • 你是对的。我需要检查这个值是从哪里插入错误的。我会检查一下。谢谢 :)
    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多