【问题标题】:How to delete the blank-space and “< >”如何删除空格和“< >”
【发布时间】:2014-01-13 06:46:39
【问题描述】:

我得到了这样的 iOS deviceToken

现在,我想删除空格和 "" ,以获取 72c7f0e943d336713b827e234337e391a96873210d2eecc4

我能做些什么呢?

另一个问题是

 - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSString *deviceString = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding];

    NSLog(@"%@",deviceString);
}

但是输出是 "null" ,为什么??

【问题讨论】:

标签: ios nsstring


【解决方案1】:
 NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
 token           = [token stringByReplacingOccurrencesOfString:@" " withString:@""];

【讨论】:

    【解决方案2】:

    你问为什么这不起作用:

    NSString *deviceString = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding];
    

    这是因为initWithData 假定NSData 包含一个UTF8 字符串。但在您的情况下,deviceToken 不是 UTF8 字符串;它是二进制数据。

    您的问题的其余部分假定您将创建 &lt;72c7f0 e943d3 36713b 827e23 4337e3 91a968 73210d 2eecc4&gt; 字符串(可能是您使用 stringWithFormatdescription 方法创建的),并且您正在询问如何修剪 &lt;&gt; , 并删除空格。 (我认为其他人已经回答了这个问题。)

    不过,我可能会建议一种不同的方法。您可以简单地使用一个例程直接创建十六进制字符串,如下所示:

    NSString *deviceString = [self hexadecimalStringForData:deviceToken];
    

    然后你可以有一个像这样的hexadecimalStringForData 方法:

    - (NSString *)hexadecimalStringForData:(NSData *)data
    {
        NSMutableString *hexadecimalString = [[NSMutableString alloc] initWithCapacity:[data length] * 2];
        uint8_t byte;
    
        for (NSInteger i = 0; i < [data length]; i++)
        {
            [data getBytes:&byte range:NSMakeRange(i, 1)];
            [hexadecimalString appendFormat:@"%02x", byte];
        }
    
        return hexadecimalString;
    }
    

    您当然可以使用description/stringWithFormat 方法,然后按照其他人的建议清理该字符串,但我认为上述方法是更直接的解决方案。

    【讨论】:

    • 非常感谢,我知道了
    【解决方案3】:

    您可以使用以下代码:

    NSString *newString1 = [deviceString stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSString *newString2 = [newString1 stringByReplacingOccurrencesOfString:@"<" withString:@""];
    NSString *finalString = [newString2 stringByReplacingOccurrencesOfString:@">" withString:@""];
    NSlog("%@",finalString);
    

    【讨论】:

      【解决方案4】:

      只需使用此代码

       - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
          {
          NSLog(@"My token is: %@", deviceToken);
          NSString *devToken;
          devToken = [[[[deviceToken description]
                               stringByReplacingOccurrencesOfString:@"<"withString:@""]
                               stringByReplacingOccurrencesOfString:@">" withString:@""]
                               stringByReplacingOccurrencesOfString:@" "withString:@""];
              NSLog(@"%@",devToken);
          }
      

      【讨论】:

        【解决方案5】:

        要替换任何字符串中的任何字符/字符串,您可以使用:

        [yourString stringByReplacingOccurrencesOfString:strToBeReplaced withString:strToBeReplacedWith];
        

        在你的情况下,你可以使用这个:

        NSString *  str= @"<72c7f0 e943d3 36713b 827e23 4337e3 91a968 73210d 2eecc4>";    
        str = [str stringByReplacingOccurrencesOfString:@"<" withString:@""];
        str = [str stringByReplacingOccurrencesOfString:@">" withString:@""];
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
        

        你也可以用这个(取自this question):

        NSString *deviceToken = [[webDeviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
        deviceToken = [deviceToken stringByReplacingOccurrencesOfString:@" " withString:@""];
        

        【讨论】:

          【解决方案6】:

          使用此代码。

           - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
                  {
          
              NSString *newToken = [deviceToken description];
                  newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
                  self.deviceToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""];
                  }
          

          【讨论】:

            【解决方案7】:

            在您的视图控制器 .m 文件中写入以下方法

            -(NSString*)contentsInParenthesis:(NSString *)str
            {
                NSString *subString = nil;
                NSRange range1 = [str rangeOfString:@"<"];
                NSRange range2 = [str rangeOfString:@">"];
                if ((range1.length == 1) && (range2.length == 1) && (range2.location > range1.location))
                {
                    NSRange range3;
                    range3.location = range1.location+1;
                    range3.length = (range2.location - range1.location)-1;
                    subString = [str substringWithRange:range3];
                }
                return subString;
            } 
            

            并使用这种方法:

            NSString *string = @"<72c7f0 e943d3 36713b 827e23 4337e3 91a968 73210d 2eecc4>";
            NSString *str=[self contentsInParenthesis:string];
            

            现在,打印 str 的描述: 72c7f0 e943d3 36713b 827e23 4337e3 91a968 73210d 2eecc4

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-08-12
              • 1970-01-01
              • 1970-01-01
              • 2012-02-28
              • 1970-01-01
              • 1970-01-01
              • 2014-02-18
              • 2011-11-03
              相关资源
              最近更新 更多