我一直在尝试按数字将字符串拆分为组件数组,但不知道该怎么做。我知道每个组件的长度都是 9,除了最后一个。但它们之间没有分离。也许有人会知道我怎样才能使这种分裂成为可能?
字符串:E44000000R33000444V33441 我想得到数组:E44000000 R33000444 V33441
过去我使用过这种方法,但我想应该有一种方法可以用常数分隔。有任何想法吗
NSArray *myWords = [message componentsSeparatedByString:@";"];
我一直在尝试按数字将字符串拆分为组件数组,但不知道该怎么做。我知道每个组件的长度都是 9,除了最后一个。但它们之间没有分离。也许有人会知道我怎样才能使这种分裂成为可能?
字符串:E44000000R33000444V33441 我想得到数组:E44000000 R33000444 V33441
过去我使用过这种方法,但我想应该有一种方法可以用常数分隔。有任何想法吗
NSArray *myWords = [message componentsSeparatedByString:@";"];
请尝试以下代码。
NSString *stringTest = @"E44000000R33000444V33441323";
NSMutableArray *arrayTest = [NSMutableArray array];
while([stringTest length] > 8) {
[arrayTest addObject:[NSString stringWithString:[stringTest substringToIndex:9]]];
stringTest = [stringTest substringFromIndex:9];
}
NSLog(@"arrayTest - %@", arrayTest);
试试这个。。
NSString *mainString=@"E44000000R33000444V";
NSMutableArray *brokenString=[NSMutableArray new];
int start=0;
for (; start<mainString.length-9; start+=9) {
[brokenString addObject:[mainString substringWithRange:NSMakeRange(start, 9)]];
}
[brokenString addObject:[mainString substringFromIndex:start]];
NSLog(@"->%@",brokenString);
输出是:
->(
E44000000,
R33000444,
V
)
我调查了 NSString,但没有发现任何类似的功能。但是您可以创建一个 NSString 类别并将此函数放在该类别中,您可以将其用作 NSString 实例方法。
- (NSArray *) componentSaparetedByLength:(NSUInteger) length{
NSMutableArray *array = [NSMutableArray new];
NSRange range = NSMakeRange(0, length);
NSString *subString = nil;
while (range.location + range.length <= self.length) {
subString = [self substringWithRange:range];
[array addObject:subString];
//Edit
range.location = range.length + range.location;
//Edit
range.length = length;
}
if(range.location<self.length){
subString = [self substringFromIndex:range.location];
[array addObject:subString];
}
return array;
}
您可以在循环(字符串长度)中将子字符串获取到您想要的字符并传递下一个索引以获取下一个子字符串。获取每个子字符串后,您可以将其添加到数组中。使用SubstringToIndex
&SubstringFromIndex
函数来获取子字符串。
这里也不是必需的,我想提出一个能够处理来自更复杂的脚本系统的字符的解决方案,例如代理对、基本字符加上组合标记、Hangul jamo和Indic consonant clusters。
@interface NSString (Split)
-(NSArray *)arrayBySplittingWithMaximumSize:(NSUInteger)size
options:(NSStringEnumerationOptions) option;
@end
@implementation NSString (Split)
-(NSArray *)arrayBySplittingWithMaximumSize:(NSUInteger)size
options:(NSStringEnumerationOptions) option
{
NSMutableArray *letterArray = [NSMutableArray array];
[self enumerateSubstringsInRange:NSMakeRange(0, [self length])
options:(option)
usingBlock:^(NSString *substring,
NSRange substringRange,
NSRange enclosingRange,
BOOL *stop) {
[letterArray addObject:substring];
}];
NSMutableArray *array = [NSMutableArray array];
[letterArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if (idx%size == 0) {
[array addObject: [NSMutableString stringWithCapacity:size]];
}
NSMutableString *string = [array objectAtIndex:[array count]-1];
[string appendString:obj];
}];
return array;
}
@end
用法
NSArray *array = [@"E44000000R33000444V33441" arraysBySplittingWithMaximumSize:9
options:NSStringEnumerationByComposedCharacterSequences];
结果是:
(
E44000000,
R33000444,
V33441
)