Дополнительный пробел в конце строки - PullRequest
0 голосов
/ 02 апреля 2012

Я просматриваю свой массив и нахожу, по какому индексу находится искомое слово. Я использую эту информацию, чтобы поставить пробел между словами, пока не достигну следующего слова. Я сохраняю этот текст, а затем сохраняю его в переменной.

Я подозреваю, что мое сравнение между 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]];
    }
}

Ответы [ 3 ]

1 голос
/ 02 апреля 2012

Я думаю, что вы хотите сравнить последний объект в массиве со всеми объектами в массиве, но isEqual используется для сравнения для двух типов объектов, а не значений в объектах, как вы можете видеть

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

это создаст arr в виде массива строк, означающего, что все объекты имеют тип [класс NSString]

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

, поскольку все объекты одного типа, isEqual вернет true, поэтому ваш код будет выполняться в другой части из-заотрицание в условии if, поэтому используйте isEqualToString для сравнения строк

1 голос
/ 02 апреля 2012

Во-первых, -[NSString componentsSeparatedByCharactersInSet:] не работает так, как вы думаете. Если в _exerciseDocument есть несколько пробелов между словами, вы получите много пустых строк в arr, а это не то, что вам нужно. Возможно, вы захотите использовать NSScanner (который по умолчанию пропускает пробелы и символы новой строки) для создания массива.

Во-вторых, arr содержит строки и никаких других объектов. Учитывая это, вы должны использовать -[NSString isEqualToString:] вместо сравнения.

В-третьих, есть ли причина, по которой вы начинаете свой второй цикл с индекса 1 вместо индекса 0?

1 голос
/ 02 апреля 2012

Этот оператор if никогда не приводит к YES, потому что цикл for всегда завершается до достижения последнего объекта в вашем массиве: i <_descriptionIndex. </p>

...