2010-02-10 5 views
2

J'essaie de créer une application pour iPhone, où je lis un flux RSS et je dois analyser l'identifiant d'un article de l'URL. Les liens fournis par le flux RSS sont comme les suivantes: http://example.com/variable/path/components/352343/index.htmliPhone: Parse Entier sur NSURL/NSString (NSScanner?)

J'ai besoin 352343.

Donc, fondamentalement, je dois chercher au moins un chiffre entre des barres obliques (composants de chemin peuvent également contenir des chiffres). Regexp serait facile: "// (\ d +) //". Mais comment puis-je le faire avec NSScanner?

Merci, Ernesto

Répondre

3

Vous pouvez diviser votre chaîne d'URL en parties séparées par "/" et vérifier si une partie est un entier valide.

NSArray* components = [urlString componentsSeparatedByString:@"/"]; 
int myId; 
for (NSString *comp in components){ 
    NSScanner *scanner = [NSScanner scannerWithString:comp]; 
    if ([scanner scanInt: &myId]) 
     return myId; 
} 

ou vous pouvez simplement utiliser la méthode NSString:

int myId; 
for (NSString *comp in components) 
    if (myId = [comp intValue]) // intValue returns 0 if comp is not an integer 
     return myId; 
+0

merci beaucoup. il y a toujours un petit gotcha: si vous avez un composant de chemin comme '20 -things ', vous en récupérerez 20. mon travail autour: utiliser le dernier entier trouvé. autre solution de contournement possible: utilisez nsscanner (voir ci-dessous) pour filtrer les chiffres. – ernesto

1

Vous devez l'utiliser en combinaison avec un jeu de caractères.

NSCharacterSet *charSet = [NSCharacterSet decimalDigitCharacterSet]; 
NSScanner *scanner = [NSScanner scannerWithString:url]; 
[scanner scanUpToCharactersFromSet:charSet intoString:nil]; 
int urlId; 
[scanner scanInt:&urlId];  

Bien sûr, cela est que si vous savez que les chiffres ne figurent pas dans le chemin d'URL avant l'ID. Si c'est le cas, vous aurez besoin d'être un peu plus robuste que cela, mais vous pouvez utiliser cet extrait comme point de départ.