2

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

它是这样构建的: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

4 回答 4

10

为什么不使用componentsSeparatedByString后跟lastObject

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

如果“库存量”总是以 3 组为一组,以“-”分隔,则上述方法有效。此外,由于您总是需要供应商库存,lastObject因此非常适合您的需求。

当然,在string1与您拆分后,-您将获得一个NSArray实例,您可以使用objectAtIndex:index. 所以如果你愿意localStock,你可以通过

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

于 2013-03-06T10:36:33.763 回答
3

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

NSArray *components = [p1.colorStock componentsSeparatedByString:@"-"];
p1.colorStock = [NSString stringWithFormat:@"%@-%@-%@",
    [components objectAtIndex:0],
    [components objectAtIndex:1],
    p2.supplierStock];
于 2013-03-06T10:38:20.073 回答
1

用一个看起来像的字符串

NSString *myString = @"Hello-World";

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

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

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

要访问字符串:

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

希望能帮助到你!

于 2013-03-06T10:40:13.680 回答
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;
于 2013-12-20T11:06:38.767 回答