我喜欢将字符串标记为字符并将标记存储在字符串数组中。我正尝试使用下面的代码,因为我使用C符号来访问数组,所以无法正常工作。什么需要改变以代替旅行路线[i]?ios中的字符串标记器
NSArray *tokanizedTravelPath= [[NSArray alloc]init];
for (int i=0; [travelPath length]; i++) {
tokanizedTravelPath[i]= [travelPath characterAtIndex:i];
我喜欢将字符串标记为字符并将标记存储在字符串数组中。我正尝试使用下面的代码,因为我使用C符号来访问数组,所以无法正常工作。什么需要改变以代替旅行路线[i]?ios中的字符串标记器
NSArray *tokanizedTravelPath= [[NSArray alloc]init];
for (int i=0; [travelPath length]; i++) {
tokanizedTravelPath[i]= [travelPath characterAtIndex:i];
您需要的NSMutableArray设置数组(否则你不能改变它的对象)。还有,你只能插入对象的数组中,这样你就可以的每一个元素:
- 插入的NSString包含角色;
- 改用C风格的数组。
这是如何与NSMutableArray的事:
NSMutableArray *tokanizedTravelPath= [[NSMutableArray alloc]init];
for (int i=0; i<[travelPath length]; i++)
{
[tokanizedTravelPath insertObject: [NSString stringWithFormat: @"%c", [travelPath characterAtIndex:i]] atIndex: i];
}
这段代码不会工作,因为for-condition是错误的。看我的帖子。 – vikingosegundo
哦,是的,没有看到它。编辑。 –
不能存储unichar
S IN的NSArray*
。你究竟想要完成什么? NSString*
已经是unichar
的集合的一个很好的代表,并且您已经拥有其中的一个。
我在你的代码中计数3个错误,我在我的回答结束时解释它们。
首先,我想告诉你一个更好的方法来分解刺入它的字符。
虽然我与凯文同意的NSString
是Unicode字符很大的代表性已经,您可以使用此基于块的代码,将其分割为多个子并将其保存到一个数组。
表格文档:
enumerateSubstringsInRange:options:usingBlock:
枚举的字符串指定范围的指定类型的 子串。
NSString *hwlloWord = @"Hello World";
NSMutableArray *charArray = [NSMutableArray array];
[hwlloWord enumerateSubstringsInRange:NSMakeRange(0, [hwlloWord length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring,
NSRange substringRange,
NSRange enclosingRange,
BOOL *stop)
{
[charArray addObject:substring];
}];
NSLog(@"%@", charArray);
输出:
(
H,
e,
l,
l,
o,
" ",
W,
o,
r,
l,
d
)
但实际上,你的问题是另一种性质的:
的NSArray
是不可改变的。一旦实例化,它不能被改变。对于可变阵列,可以使用NSArray
子类NSMutableArray
。
此外,characterAtIndex
不会返回一个对象,而是一个原始类型 - 但这些不能保存到NSArray
。您必须将其包装到NSString
或其他表示中。
您可以改为使用substringWithRange
。
NSMutableArray *tokanizedTravelPath= [NSMutableArray array];
for (int i=0; i < [hwlloWord length]; ++i) {
NSLog(@"%@",[hwlloWord substringWithRange:NSMakeRange(i, 1)]);
[tokanizedTravelPath addObject:[hwlloWord substringWithRange:NSMakeRange(i, 1)]];
}
此外,您的for循环是错误的for循环条件不正确。它必须是for (int i=0; i < [travelPath length]; i++)
将字符串拆分为单个字符不是“标记”它。 –