1

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

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

谁能给我一些关于如何做到这一点的指导?

例子:'!!2553072 C'

而且我要 :'53072 '

4

4 回答 4

2

您可以使用正则表达式模式完成此操作:(.{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]]);
}
于 2012-12-20T16:48:42.857 回答
1

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

- (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)];
}
于 2012-12-20T16:39:38.433 回答
1

可能有一种更优雅的方法可以做到这一点,涉及正则表达式或一些 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;
}
于 2012-12-20T16:47:00.310 回答
0
//to get rid of all non-Digits in a NSString
NSString *customerphone = CustomerPhone.text;
int phonelength = [customerphone length];
NSRange customersearchRange = NSMakeRange(0, phonelength);
for (int i =0; i < phonelength;i++)
{
    const unichar c = [customerphone characterAtIndex:i];
    NSString* onechar = [NSString stringWithCharacters:&c length:1];
    if(!isdigit(c))
    {
        customerphone = [customerphone stringByReplacingOccurrencesOfString:onechar withString:@"*" options:0 range:customersearchRange];
    }
}
NSString *PhoneAllNumbers = [customerphone stringByReplacingOccurrencesOfString:@"*" withString:@"" options:0 range:customersearchRange];
于 2022-02-15T12:08:35.863 回答