【问题标题】:Removing last characters of NSString until it hits a separator删除 NSString 的最后一个字符,直到它碰到分隔符
【发布时间】:2013-03-06 10:33:42
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c nsstring substring


    【解决方案1】:

    为什么不使用 componentsSeparatedByString 后跟 lastObject

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        用一个看起来像的字符串

        NSString *myString = @"Hello-World";
        

        你可以用 NSString 对象的componentsSeparatedByString: 方法将其分隔为

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

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

        访问字符串:

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

        希望对你有帮助!

        【讨论】:

          【解决方案4】:

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

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

          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;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-27
            • 1970-01-01
            • 2013-01-17
            相关资源
            最近更新 更多