Objective c 目标C if和附加NSMutableString语句/修改

Objective c 目标C if和附加NSMutableString语句/修改,objective-c,nsstring,Objective C,Nsstring,我有一个复杂的问题,对你来说可能很简单,伙计 我有一个 NSMutableString=“这是菠菜” 我有三个布尔人。请忽略代码。我没有使用正确的语法、函数 if (boolA) appendstring"and apples"; if (boolB) appendstring"and mangoes"; if (boolC) appendstring"and oranges"; 每个布尔值对应一个水果。 如果布尔a是真的,我也有芒果 无论如何,我的目标是通过附加其他结果来格式化初始字

我有一个复杂的问题,对你来说可能很简单,伙计

我有一个

NSMutableString=“这是菠菜”

我有三个布尔人。请忽略代码。我没有使用正确的语法、函数

if (boolA) appendstring"and apples";

 if (boolB) appendstring"and mangoes";

 if (boolC) appendstring"and oranges";
每个布尔值对应一个水果。 如果布尔a是真的,我也有芒果

无论如何,我的目标是通过附加其他结果来格式化初始字符串,如果相应的布尔值为真并且以非常特定的方式出现

这是一个场景,如果布尔A是真的,字符串应该是“这是菠菜和芒果” 注意添加了“and”和芒果。我可以直接添加它,并在末尾添加一个apending

但问题是当所有的布尔值都为真时。 字符串看起来像“这是菠菜、苹果、芒果和桔子”,我可以做到这一点

我想让它看起来像“这是菠菜和苹果,芒果,桔子” 请注意,我只想在芒果和橙子之前添加一次“和”,并注意逗号“,”

我可能可以得到这个,但是有很多检查和很多不必要的if/else语句

我在想我可以转个弯

"This is spinach and apples and mangoes and oranges" into 
"This is spinach and apples , mangoes , oranges".
我猜我可以用某种函数来做这件事。例如,将第二个和第三个“”替换为“


你们能告诉我一个这样的函数和一个例子吗。我认为这在当时的CPP中是可能的。。使用strpos()获取字符的位置,然后在某个数字后执行某些操作并替换字符串。或者让我知道是否有更好的方法。

我会使用每个bool将水果串附加到数组中

items = [NSArray new];

if (boolA) [items append: @"apples"];
if (boolB) [items append: @"bannanas"];
if (boolC) [items append: @"cranberries"];
然后我将查看数组的长度,并对任何语言(英语、法语等)执行“正确”操作

伪/断开的Objc代码:

r = [NSMutableString string];
[r appendString: @"This is "];

if ([items length] == 1) {
  [r appendString: [items at: 0]];
}
if ([items length] == 2) {
  [r appendStringWithFormat: @"%@ and %@ ", [items at: 0], [items at: 1]] ;
}
if ([items length] > 2) {
  for (int i = 0; i < [items length]; i++) {    
    if (i == ([items length] - 1)) //if last
      [r appendString: @"and "];
    [r appendString: [items at: i]];
    [r appendString: @", "];
  }
}
r=[NSMutableString];
[r appendString:@“这是”];
如果([项目长度]==1){
[r appendString:[位于0的项目]];
}
如果([项目长度]==2){
[r appendStringWithFormat:@“%@和%@”,[项目位于:0],[项目位于:1];
}
如果([项目长度]>2){
对于(int i=0;i<[项目长度];i++){
if(i==([items length]-1))//如果最后
[r追加字符串:@“和”];
[r appendString:[位于:i]的项目];
[r追加字符串:@“,”];
}
}
同样,这只是一个客观的伪代码。我只是给你要点,而不是 给你一些你应该粘贴到系统中的东西。可能有 错误的方法名和mem泄漏了这个

而且,如果你开始处理复数和单数,事情会变得更复杂,但不会太复杂


干杯

一个非常简单和天真的方法是:

NSMutableString* message = [NSMutableString stringWithCapacity:15];
[message setString:@"This is spinach"];

BOOL boolA = YES, boolB = NO, boolC = YES;

// add "and" if there are any fruits
if(boolA || boolB || boolC)
    [message appendString:@" and"];

if(boolA)
    [message appendString:@" apples,"];
if(boolB)
    [message appendString:@" oranges,"];
if(boolC)
    [message appendString:@" mangoes,"];

// remove last ","
if(boolA || boolB || boolC)
    [message deleteCharactersInRange:NSMakeRange([message length] - 1, 1)];
这导致

This is spinach and apples, mangoes

这里有一个更干净的解决方案,它使用数组而不是bool1 bool2等

检查有多少布尔值是真的(如果你把它们放在一个数组中,把字符串放在另一个数组中会更容易),这样你就知道你的输出是什么了。字符串数组应该只包含唯一的水果,而不是“and”。你会有一个叫做isand=false的bool;迭代bool数组,如果得到true,则在其他数组中附加“和”+水果名称,并将其他bool设置为true。然后你知道剩下的不要再加上更多的“和”

编辑:这很难理解,这里有一些代码(我的objective C语法可能不完美,甚至接近完美,请纠正我的错误并注释:D)

bool isand=false;
NSMUTABLEARRY*字符串=[NSMUTABLEARRY alloc]init];
NSMutableArray*bools=[NSMutableArray alloc]init];
NSMutableString=@“这是菠菜”;
//用值填充数组

对于(NSInt x=0;x另一个解决方案,这次使用+[NSArray组件jjoinedbystring:]

NSMutableArray* fruits = [NSMutableArray arrayWithCapacity:3];

if(boolA)
    [fruits addObject:@"apples"];
if(boolB)
    [fruits addObject:@"oranges"];
if(boolC)
    [fruits addObject:@"mangoes"];

NSString* message;
if([fruits count] > 0)
    message = [NSString stringWithFormat:@"This is spinach and %@", [fruits componentsJoinedByString:@", "]];
else
    message = @"This is spinach";
NSMutableArray* fruits = [NSMutableArray arrayWithCapacity:3];

if(boolA)
    [fruits addObject:@"apples"];
if(boolB)
    [fruits addObject:@"oranges"];
if(boolC)
    [fruits addObject:@"mangoes"];

NSString* message;
if([fruits count] > 0)
    message = [NSString stringWithFormat:@"This is spinach and %@", [fruits componentsJoinedByString:@", "]];
else
    message = @"This is spinach";