2012-04-02 148 views
0

我正在浏览我的数组,并查找搜索到的单词处于哪个索引处。我使用这些信息在单词之间加入空格,直到达到下一个单词。我保存该文本,然后将其存储在一个变量中。字符串末尾多余的空格

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

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]]; 
    } 
} 
+0

你能提供一些预期输入/输出的例子吗? – fbernardo 2012-04-02 17:51:40

回答

1

首先, -[NSString componentsSeparatedByCharactersInSet:]不按照您认为的方式工作。如果_exerciseDocument中的单词之间有多个空格,那么最后会在arr中出现大量空字符串,这不是您想要的。您可能需要考虑使用NSScanner(默认情况下会跳过空格和换行符)来创建阵列。

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

第三,是否有一个原因,你开始你的第二个循环在索引1而不是索引0?

+0

我知道我正在阅读的文本文档不会在每个单词之间包含多个空格,所以这不应该是一个问题,但我很好奇你将如何使用NSScanner实现这个功能?我从索引1开始,因为我不想将文件中的第一个单词放入字符串中。 – 2012-04-02 22:29:45

+0

@NielsSønderbæk:你会用你的_exerciseDocument字符串设置你的扫描仪,首先去除前导和尾随空格。您将使用(![scanner isAtEnd])实现一个while循环作为条件。在循环内部,首先使用扫描器扫描+ [NSCharacterSet whitespaceAndNewlineCharacterSet]中的字符,并通过引用获取字符串。然后,您将扫描空白字符和换行符,为字符串引用传递NULL,因为您不会关心这些字符。在读入字符串时,将它们添加到可变数组中。 – trudyscousin 2012-04-02 22:41:18

+0

@NielsSønderbæk:这提供的唯一好处是能够处理单词之间的多个空格(正如您所指出的那样,这不是问题)。但是,当你不能只依靠一个空间时,它运作得非常好。 – trudyscousin 2012-04-02 22:43:02

1

这if语句永远结果为YES,因为你的for循环数组中到达最后一个对象之前,总是终止:我< _descriptionIndex。

1

我想你想在数组最后一个对象比较在矿井阵列中的所有对象,但的isEqual用来比较两个对象类型不是对象的值,你可以看到

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

这将创造ARR作为字符串的阵列装置的所有对象都是类型的[NSString类]

如果([[ARR lastObject] isEqual:方法[ARR objectAtIndex:I]]!)

,因为所有的对象都是同一类型的isEqual的将返回true,那么你的代码将在因为否定的其他部分运行,如果情况如此则应使用isEqualToString比较字符串