【问题标题】:Finding first letter in NSString and counting backwards在 NSString 中查找第一个字母并倒数
【发布时间】:2012-12-08 05:34:24
【问题描述】:

我是 IOS 新手,正在寻求一些指导。

我正在解析一个很长的 NSString。开头可能有几个垃圾字符(可以是任何非字母字符),然后是 11 个数字或空格,然后是单个字母 (A-Z)。我需要获取字母的位置,并将字母后面11个字符的子字符串获取到字母后面的1个字符。

谁能给我一些指导?

示例:'!!2553072 C'

我想要:'53072 '

【问题讨论】:

  • 我假设您确实是指 11 个字符,而您的示例很短 - 您说您想要的字符串只有 6 个字符长。
  • 是的,很抱歉他们在发布时切断了多个空格

标签: ios parsing nsstring nsscanner


【解决方案1】:

您可以使用正则表达式模式完成此操作:(.{11})\b[A-Z]\b

(.{11}) 将抓取任意 11 个字符,\b[A-Z]\b 将在单词边界上查找单个字符,这意味着它将被空格包围或位于字符串的末尾。如果字符可以跟随您示例中的C,则删除最后一个\b。这可以像这样在 Objective-C 中完成:

NSError *error;
NSString *example = @"!!2553072      C";
NSRegularExpression *regex = [NSRegularExpression
                              regularExpressionWithPattern:@"(.{11})\\b[A-Z]\\b"
                              options:NSRegularExpressionCaseInsensitive
                              error:&error];

if(!regex)
{
    //handle error
}

NSTextCheckingResult *match = [regex firstMatchInString:example
                                                options:0
                                                  range:NSMakeRange(0, [example length])];
if(match)
{
    NSLog(@"match: %@", [example substringWithRange:[match rangeAtIndex:1]]);
}

【讨论】:

    【解决方案2】:

    可能有一种更优雅的方式来执行此操作,涉及正则表达式或一些 Objective-C 魔法,但这里有一个简单的解决方案(经过个人测试)。

    -(NSString *)getStringContent:(NSString *)input
    {
        NSString *substr = nil;
        NSRange singleLetter = [input rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
        if(singleLetter.location != NSNotFound)
        {
            NSInteger startIndex = singleLetter.location - 11;
            NSRange substringRange = NSMakeRange(start, 11);
            substr = [tester substringWithRange:substringRange];
        }
    
        return substr;
    }
    

    【讨论】:

    • 这些都超级有用,但是我用了这个方法。谢谢大家。
    【解决方案3】:

    您可以使用NSCharacterSets 来拆分字符串,然后取出剩余的第一个组件(由您的垃圾和数字组成)并获取它的子字符串。例如(未编译,未测试):

    - (NSString *)parseString:(NSString *)myString {
        NSCharacterSet *letters = [NSCharacterSet letterCharacterSet];
        NSArray *components = [myString componentsSeparatedByCharactersInSet:letters];
        assert(components.count > 0);
        NSString *prefix = components[0]; // assuming relatively new Xcode
        return [prefix substringFromIndex:(prefix.length - 11)];
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      相关资源
      最近更新 更多