我有一個字符串..查找某些字符和字符串在Objective-C
NSString* string = @"%B999999^PDVS123456789012^PADILLA L. ^0X0000399 ?*;999999554749123456789012=00X990300000?*
我想是讓名PADILLA L.
和999999554749123456789012=00X990300000?*
我有一個字符串..查找某些字符和字符串在Objective-C
NSString* string = @"%B999999^PDVS123456789012^PADILLA L. ^0X0000399 ?*;999999554749123456789012=00X990300000?*
我想是讓名PADILLA L.
和999999554749123456789012=00X990300000?*
使用NSString componentsSeparatedByString:
拆分串起來。首先使用@"^"
。該名稱將位於索引2處。然後使用@";"
將索引3中的子字符串拆分。索引1處的字符串將爲您提供您想要的第二部分。
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];
沒有在這裏更多的細節是蠻力方式:
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
不知道確切的輸入模式是什麼(我們有你的正的-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:®exError];
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]);
}
}
}
這一點粉底應用程序打印以下控制檯:
name = PADILLA L. number = 999999554749123456789012=00X990300000
用於分析輸入字符串的正則表達式可能需要根據輸入字符串的變化來調整。現在它是(未轉義的):
^%\w+\^\w+\^([A-Za-z\s]+\.).+\?\*\;(.+)\?\*$
請記住,此解決方案僅在數據保證爲固定長度時纔有效。 – rmaddy
是的。究竟。我的意思是我很欣賞你的答案,但硬編碼範圍不是很明智。但是,謝謝你的回答。 :) – jongbanaag