删除NSString的最后一个字符,直到它到达分隔符

时间:2013-03-06 10:33:42

标签: ios objective-c nsstring substring

我有一个字符串,用“ - ”作为分隔符来显示库存量。

它构建如下:localStock - wareHouseStock - supplierStock

现在我想更新字符串末尾的supplierStock,但正如您在下面的代码中看到的那样,当原始字符串返回的空间值超过单个空格值(例如20)时,它会出错。

有没有办法删除所有字符,直到最后一个“ - ”(或删除第二个“ - ”后面的字符)?

NSMutableString *string1 = [NSMutableString stringWithString: p1.colorStock];
                NSLog(@"string1: %@",string1);
                NSString *newString = [string1 substringToIndex:[string1 length]-2];
                NSLog(@"newString: %@",newString);
                NSString *colorStock = [NSString stringWithFormat:@"%@-%@",newString,p2.supplierStock];
                NSLog(@"colorstock: %@",colorStock);
                p1.colorStock = colorStock;

NSLog1

string1: 0-0-0
newString: 0-0
colorstock: 0-0-20

NSLog2

string1: 0-0-20
newString: 0-0-
colorstock: 0-0--20

编辑:感谢Srikar的工作!

NSString *string1 = [NSString stringWithString: p1.colorStock];
                NSLog(@"string1: %@",string1);
                NSString  *finalString = [string1 stringByReplacingOccurrencesOfString:[[string1 componentsSeparatedByString:@"-"] lastObject] withString:p2.supplierStock.stringValue];
                NSLog(@"finalString: %@",finalString);
                p1.colorStock = finalString;

4 个答案:

答案 0 :(得分:10)

为什么不使用componentsSeparatedByString后跟lastObject

NSString *supplierStock = [[string1 componentsSeparatedByString:@"-"] lastObject];

如果“库存量”总是以“ - ”分隔的3个集合,则上述情况有效。此外,由于您始终需要supplierStock,lastObject非常适合您的需求。

当然,在将string1-分开后,您会获得NSArray个实例,并且可以使用objectAtIndex:index访问各个组件。所以,如果你想要localStock,你可以通过

NSString *localStock = [[string1 componentsSeparatedByString:@"-"] objectAtIndex:0];

答案 1 :(得分:3)

我建议使用[NSString componentsSeparatedByString:@"-"]将字符串拆分为3个部分,然后再将其重新构建:

NSArray *components = [p1.colorStock componentsSeparatedByString:@"-"];
p1.colorStock = [NSString stringWithFormat:@"%@-%@-%@",
    [components objectAtIndex:0],
    [components objectAtIndex:1],
    p2.supplierStock];

答案 2 :(得分:1)

使用类似

的字符串
NSString *myString = @"Hello-World";

您可以将其与NSString对象的componentsSeparatedByString:方法分开为

NSArray *myWords = [myString componentsSeparatedByString:@"-"];

myWords - 数组将包含两个NSString个对象HelloWorld

访问字符串:

NSString *theHelloString = [myWords objectAtIndex:0];
NSString *theWorldString = [myWords objectAtIndex:1];

希望它有所帮助!

答案 3 :(得分:0)

如果您不知道原始字符串中将有多少这些分隔符出现,这些示例都不会显示如何执行此操作。

以下是我认为正确的代码应该用于拆除原始字符串并重建它,直到到达最终分隔符,无论它包含多少分隔符。

NSString *seperator = @" ";
NSString *everythingBeforeLastSeperator;

NSArray *stringComponents = [originalString componentsSeparatedByString:seperator];

if (stringComponents.count!=0) {

    everythingBeforeLastSeperator = [stringComponents objectAtIndex:0];

    for (int a = 1 ; a < (stringComponents.count - 1) ; a++) {
        everythingBeforeLastSeperator = [NSString stringWithFormat:@"%@%@%@", everythingBeforeLastSeperator, seperator, [stringComponents objectAtIndex:a]];
    }
}

return everythingBeforeLastSeperator;