字符串末尾的额外空间

时间:2012-04-02 17:41:53

标签: objective-c ios for-loop xcode4.2

我正在查看我的数组并找到搜索到的单词所在的索引。我使用该信息在单词之间放置空格,直到我到达下一个单词。我保存该文本,然后将其存储在变量中。

我怀疑我在lastObject和arr objectAtIndex:i之间的比较是不行的,但我似乎无法弄清楚为什么?

NSArray * arr;

NSScanner *scanner = [NSScanner scannerWithString:_exerciseDocument];

while(![scanner isAtEnd])
{
    NSString *buffer;
    if([scanner scanCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:&buffer])
        {
          [scanner scanUpToString:" " intoString:&buffer];          
          [scanner scanString:@" " intoString:nil];  
        }
    else
        {

        }

for(int i=0; i <arr.count; i++)
{
    NSString *stringToCheck = (NSString *)[arr objectAtIndex:i];
    if([stringToCheck isEqualToString:@"Fokus:"])
    {
        _descriptionIndex = i;
    }
    if([stringToCheck isEqualToString:@"Niveau:"])
    {
        _focusIndex = i;
    }
    if([stringToCheck isEqualToString:@"Redskab:"])
    {
        _niveauIndex = i;
    }
    if([stringToCheck isEqualToString:@"Vanddybde:"])
    {
        _equipmentIndex = i;
    }
}

_descriptiontToTextField = [[NSString alloc]init];
for(int i=1; i <_descriptionIndex; i++)
{
    if(![[arr lastObject] isEqual:[arr objectAtIndex:i]])
    {
        _descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:[ arr objectAtIndex:i]];
        _descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:@" "];
    }
    else
    {
        _descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:[ arr objectAtIndex:i]];
    }
}

3 个答案:

答案 0 :(得分:1)

if-statement永远不会结果为YES,因为你的for循环总是在到达数组中的最后一个对象之前终止:i&lt; _descriptionIndex。

答案 1 :(得分:1)

我想你想比较数组中的最后一个对象和数组中的所有对象,但isEqual用于比较两个对象的类型,而不是对象中的值,正如你所看到的那样

  

NSArray * arr = [_exerciseDocument componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

这将创建arr作为字符串数组意味着所有对象都是[NSString class]

类型
  

if(![[arr lastObject] isEqual:[arr objectAtIndex:i]])

因为所有对象都是相同类型,所以isEqual将返回true,因此你的代码将在else部分运行,因为if条件中的否定因此使用isEqualToString来比较字符串

答案 2 :(得分:1)

首先,-[NSString componentsSeparatedByCharactersInSet:]无法按照您的想法运作。如果_exerciseDocument中的单词之间有多个空格,那么arr中的大量空字符串将会结束,这不是您想要的。您可能需要考虑使用NSScanner(默认情况下,跳过空格和换行符)来创建数组。

其次,arr包含字符串,没有其他类型的对象。鉴于此,您应该使用-[NSString isEqualToString:]代替比较。

第三,你是否有理由在索引1处开始第二次循环而不是索引0?