我一直在尝试按字母顺序将字符串拆分为组件数组,但不知道如何操作。我知道每个组件的长度都是9,除了最后一个。但他们之间没有分离。也许有人会知道我怎么能让这种分裂成为可能呢?
字符串:E44000000R33000444V33441 我想得到阵列:E44000000 R33000444 V33441
在过去我使用过这种方法,但我想应该有一种方法可以用常数来分隔。任何想法
NSArray *myWords = [message componentsSeparatedByString:@";"];
答案 0 :(得分:2)
请尝试以下代码。
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);
答案 1 :(得分:2)
试试这个..
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
)
答案 2 :(得分:1)
我调查了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;
}
答案 3 :(得分:0)
您可以将子字符串放到循环中所需的字符(字符串长度)&amp;传递下一个索引以获取下一个子字符串。获取每个子字符串后,您可以将其添加到数组中。
已使用SubstringToIndex
&amp; SubstringFromIndex
函数用于获取子字符串。
答案 4 :(得分:0)
此处也不是必需的,我想提出一个能够处理来自更复杂的脚本系统中的字符的解决方案,例如surrogate pairs,基本字符加combining marks,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
)