3

私は以下のような長い文字列を持っています

既存のコードへのアップグレードを提供するために出席することを計画してください

お尻のチームメンバーを受け入れるための朝の会議

会議番号:457 231 123


この会議に参加するには

  1. http://domainname.comにアクセスします
  2. パスワードを入力する

ここで、「会議番号」というテキストの後に番号を取得します。つまり、457 231 123

助けてください。ありがとう

編集

文字列があるとしましょう

NSString *myString = @"Please plan to attend to provide upgrade to existing code morning meeting to acoomdate bum team members  Meeting Number: 457 231 123 ----------------------------------------------------- to join this meeting ------------------------------------------------------  1. go to http://domainname.com 2. enter password"
4

7 に答える 7

3

NSScannerが必要です。それは特にこの種のもののためにあります。

NSScanner *scanner = [NSScanner scannerWithString:yourString];
NSString *prefix = @"Meeting number: ";
NSString *numbers;
[scanner scanUpToString:prefix intoString:NULL];
[scanner scanString:prefix intoString:NULL];
[scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&numbers];
// numbers now contains the numbers you want.

scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet](これは、プレフィックス文字列を含む2行の代わりに実行することで、任意の数を見つけるように簡単に適合させることができます。)

于 2012-04-24T05:16:36.610 に答える
2

正規表現を使用して数値をキャプチャすることもできます(結果には数字とスペースのみが含まれ、常に「会議番号:」プレフィックスが存在すると仮定します)。

NSString *text = @"Please plan to attend to provide upgrade to existing code\nmorning meeting to acoomdate bum team members\nMeeting Number: 457 231 123\nTo join this meeting\n\ngo to http://domainname.com\nenter password";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"Meeting Number: ([0-9 ]+)" options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regex matchesInString:text
                                  options:0
                                    range:NSMakeRange(0, [text length])];
for (NSTextCheckingResult *match in matches) {
    NSRange matchRange = [match rangeAtIndex:1];
    NSString *result = [text substringWithRange:matchRange]; // Here is the result
}

ここにループがあるので、これを使用して複数の入力を一緒に解析できます。要件が1つの入力を解析することだけである場合は、正規表現の宣言後のコードを次のように置き換えます。

NSTextCheckingResult *match = [regex firstMatchInString:text
                                                options:0
                                                  range:NSMakeRange(0, [text length])];
if (match) {
    NSRange matchRange = [match rangeAtIndex:1];
    NSString *result = [text substringWithRange:matchRange];
}
于 2012-04-24T05:28:49.163 に答える
0

あなたは次のようなものを使うことができるかもしれません-

NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
int numberValue = [[@"Meeting Number: 457 231 123" stringByTrimmingCharactersInSet:nonNumberSet] intValue];

編集-すべての番号について-

NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
int numberValue = [[[@"Meeting Number: 457 231 123" componentsSeparatedByCharactersInSet:nonNumberSet] componentsJoinedByString:@""] intValue]; 
于 2012-04-24T05:00:40.740 に答える
0

これはそれを行います(一般性はほとんどありません):

NSRange promptRange = [bigString rangeOfString:@"Meeting Number: "];
NSRange numberRange = NSMakeRange(promptRange.location + promptRange.length, 11);
NSString *answer = [bigString substringWithRange:numberRange];
于 2012-04-24T05:02:25.620 に答える
0

のように文字列を取ります

NSString *str = @"Meeting Number: 457 231 123";

文字列で区切られています

NSArray *theList = [str componentsSeparatedByString:@":"];
NSString *getStr = [theList objectAtIndex:1];
[getStr stringByReplacingOccurrencesOfString:@" " withString:@""];
于 2012-04-24T05:05:55.820 に答える
0

1つの番号が必要な場合は、これでうまくいくはずです。

static int ReadMeetingNumber(NSString * string) {
    // ARC:
    // locate the line
    NSString * const prefix = @"Meeting Number: ";
    NSMutableString * meetingNumberLine = nil;
    for (NSString * line in [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]) {
        if ([line hasPrefix:prefix]) {
            meetingNumberLine = [line mutableCopy];
        }
    }

    if (nil == meetingNumberLine) {
        return nil; 
    }
    // trim and get int value
    [meetingNumberLine deleteCharactersInRange:NSMakeRange(0, prefix.length)];
    [meetingNumberLine replaceOccurrencesOfString:@" " withString:@"" options:0 range:NSMakeRange(0, meetingNumberLine.length)];
    return meetingNumberLine.intValue;
}

個々の番号を見つけたい場合は、これでうまくいくはずです。

// ARC:
// Returns an NSArray of NSNumbers
static NSArray * ReadMeetingNumbers(NSString * string) {
    // locate the line
    NSString * const prefix = @"Meeting Number: ";
    NSMutableString * meetingNumberLine = nil;
    for (NSString * line in [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]) {
        if ([line hasPrefix:prefix]) {
            meetingNumberLine = [line mutableCopy];
        }
    }

    if (nil == meetingNumberLine) {
        return nil; 
    }

    [meetingNumberLine deleteCharactersInRange:NSMakeRange(0, prefix.length)];

    // locate the numbers:
    NSMutableArray * results = [NSMutableArray new];
    for (NSString * at in [meetingNumberLine componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]) {
        const int   intValue = at.intValue;
        if (0 != intValue) {
            [results addObject:[NSNumber numberWithInt:intValue]];
        }
    }
    return [results copy];
}
于 2012-04-24T05:10:18.207 に答える
0

次のコードを使用して上記の文字列内のすべての数字をスキャンすることにより、上記のタスクを実行できます。

NSString * inputString = @"Please plan to attend to provide upgrade to existing code morning meeting to acoomdate bum team membersMeeting Number: 457 231 123To join this meeting go tohttp://domainname.comenter password"; // Your input string 
NSString * subStr = [inputString substringWithRange:NSMakeRange([inputString rangeOfString:@"Meeting Number:"].location, 27)];
NSString *number = [[subStr componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; // Scans all numbers from input string
NSLog(@"%@",number); // Your required output printed in console
于 2012-04-24T05:41:35.080 に答える