2017-07-16 7 views
1

Ich habe die folgende Implementierung wo eine comboKey ist eine Zeichenfolge, die ich versuche, die ganzen Zahlen abzurufen.Nur positive ganze Zahlen aus einer gegebenen Zeichenfolge abrufen

Zum Beispiel, wenn die comboKey2m1s ist und dann @[@"2",@"1"] zurückgibt; Das ist perfekt.

Wenn comboKey0m2s ist und dann kehrt es @[@"0",@"2"]; aber ich will nicht 0 haben. Ich möchte nur positive Zahl haben (s) @[@"2"];

+ (NSArray*)comboCategoryItems : (NSString*)comboKey 
{   
    NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 
    NSArray *outArray = [comboKey componentsSeparatedByCharactersInSet:nonDigitCharacterSet]; 
    outArray = [outArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]]; 
    return outArray; 
} 
+0

lassen Sie mich für diese Zeichenfolge @ "80m254s" wissen, was sollte Ihre Methode zurückgeben? –

+0

, die 80 und 254 zurückgeben würde, verwende ich Zeichenfolge als Trennzeichen. – hotspring

Antwort

1

Hier ist eine andere Art und Weise, dies zu tun, reguläre Ausdrücke

NSRegularExpression * exp = [[NSRegularExpression alloc]initWithPattern:@"([1-9]([0-9])*)+" options:NSRegularExpressionDotMatchesLineSeparators error:nil]; 
NSString * text = @"80m254s"; 
NSMutableArray *resultArray = [NSMutableArray array]; 
[exp enumerateMatchesInString:text options:NSMatchingWithoutAnchoringBounds range:NSMakeRange(0, text.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) { 
    [resultArray addObject:[text substringWithRange:[result range]]]; 
}]; 


NSLog(@"%@",resultArray); 

für @"0m2s"

2017-07-15 22 mit: 31: 18,576397 RegexTestingProject [21823: 1942182] ( 2)

für @"80m254s"

2017.07.15 22: 33: 50,378485 RegexTestingProject [21826: 1.942.829] ( 80, 254)

für @"080m254s"

2017-07-15 22:35: 40.760626 RegexTestingProject [21828: 1943403] ( 80, 254)

Hoffnung, dies hilft Ihnen

+0

Ich bin auf dem Weg nach Hause, ich werde es in 30-40 Minuten testen. Ich habe uplooted, sobald ich überprüfe und dann als Antwort markiere. Ist es o.k? – hotspring

+1

@hotspring, wenn Ihr Problem löst, ich bin froh, zu helfen, mit freundlichen Grüßen –

+0

Jede Idee https://StackOverflow.com/Questions/45125520/clicked-header-section-is-Scroll-to-top – hotspring

1

Sie Sie wenig Fehler gemacht haben. Im Prädikat überprüfen Sie die Länge der Zeichenfolge und nicht den Wert. Ändern Sie einfach das Prädikat wie folgt @"integerValue > 0" Ihr Code wird erwartetes Ergebnis produzieren.

Verwandte Themen