2

文字列があります。

NSString* string = @"%B999999^PDVS123456789012^PADILLA L.                    ^0X0000399           ?*;999999554749123456789012=00X990300000?*

私が欲しいのは名前を取得しPADILLA L.999999554749123456789012=00X990300000?*

4

3 に答える 3

4

NSString componentsSeparatedByString:文字列を分割するために使用します。最初の使用@"^"。名前はインデックス 2 になります。次に、 を使用してインデックス 3 で部分文字列を分割し@";"ます。インデックス 1 の文字列は、必要な 2 番目のピースを提供します。

NSArray *substrings = [string componentsSeparatedByString:@"^"];
NSString *name = substrings[2];
name = [name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *lastpart = substrings[3];
NSArray *moresubstrings = [lastpart componentsSeparatedByString:@";"];
NSString *secondPiece = moresubstrings[1];
于 2012-11-23T01:29:51.893 に答える
0

これ以上の詳細がなければ、ここに力ずくの方法があります:

NSString* string = @"%B999999^PDVS123456789012^PADILLA L.                    ^0X0000399           ?*;999999554749123456789012=00X990300000?*";
NSRange nameRange = {26, 10};
NSString *name = [string substringWithRange:nameRange];
NSRange numRange = {80, 39};
NSString *num = [string substringWithRange:numRange];

ドキュメンテーションはあなたの友達です: NSString Class Reference

于 2012-11-23T01:41:10.020 に答える
0

正確な入力パターンが何であるかを知らなければ (n-of-1 の例しかありません)、これを適切に解析する方法を正確に言うのは難しいでしょう。ただしNSRegularExpression、必要なものを提供します(他の提案されたアプローチに加えて):

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSString *sampleText = @"%B999999^PDVS123456789012^PADILLA L.                    ^0X0000399           ?*;999999554749123456789012=00X990300000?*";
        NSError *regexError = nil;
        NSRegularExpressionOptions options = 0;
        NSString *pattern = @"^%\\w+\\^\\w+\\^([A-Za-z\\s]+\\.).+\\?\\*\\;(.+)\\?\\*$";
        NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern options:options error:&regexError];

        NSTextCheckingResult *match = [expression firstMatchInString:sampleText options:0 range:range];
        if( match ) {
            NSRange nameRange = [match rangeAtIndex:1];
            NSRange numberRange = [match rangeAtIndex:2];

            printf("name = %s ",[[sampleText substringWithRange:nameRange] UTF8String]);
            printf("number = %s\n",[[sampleText substringWithRange:numberRange] UTF8String]);
        }
    }
}

この小さな Foundation アプリケーションは、以下をコンソールに出力します。

name = PADILLA L. number = 999999554749123456789012=00X990300000

入力文字列の変化に応じて、入力文字列の分析に使用される正規表現を微調整する必要がある場合があります。現在は(エスケープされていません):

^%\w+\^\w+\^([A-Za-z\s]+\.).+\?\*\;(.+)\?\*$
于 2012-11-23T02:13:49.800 に答える