ios中的字符串标记符

时间:2012-09-18 01:42:12

标签: objective-c ios stringtokenizer

我喜欢将字符串标记为字符并将标记存储在字符串数组中。我试图使用以下代码,因为我使用C表示法来访问数组。什么需要改变而不是旅行路径[i]?

NSArray *tokanizedTravelPath= [[NSArray alloc]init];
for (int i=0; [travelPath length]; i++) {
    tokanizedTravelPath[i]= [travelPath characterAtIndex:i];

3 个答案:

答案 0 :(得分:1)

您需要一个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];
}

答案 1 :(得分:1)

您无法将unichar存储在NSArray*中。你到底想要完成什么? NSString*已成为unichar集合的绝佳代表,您已经拥有其中之一。

答案 2 :(得分:1)

我在你的代码中计算了3个错误,我在答案的最后解释了它们 首先,我想向您展示一种更好的方法,将刺痛分成角色。


虽然我同意Kevin的观点,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++)