【问题标题】:Clipping NSString based on length + range of string根据长度+字符串范围裁剪 NSString
【发布时间】:2013-09-03 22:59:30
【问题描述】:

我有一个大的 NSString 想要修剪:

this is an example of my long string

首先,我将其修剪为某个或多个单词。例如,我选择“长”这个词。要实现这一点:

NSRange textRange = [[theEntireString lowercaseString] rangeOfString:@"long"];
NSString *subString = //do something to get the individual word(s)??

这会导致:

long

但是,我的最终结果需要 10 个字符。所以在这种情况下,我想要达到的最终结果是:

my long st

如您所见,我在单词的左侧和右侧均匀地添加字符,直到达到所需的字符数,将单词或单词放在中间。

非常感谢任何帮助。

【问题讨论】:

  • 您忘记发布已有的代码。
  • 在这种情况下,我不同意 H2CO3,尽管最好准确了解您尝试过的内容以及您的解决方案有什么问题。我可以在这里看到您不只是在问“请输入代码?!”并且实际上已经开始着手解决方案。这也是一个很小的问题,你不是要求整个程序。还应该注意的是,这就是我没有提供完整解决方案的原因,而只是提供了一个适合您的确切情况而不是通用解决方案的解决方案。希望你能扩展我提供的代码。

标签: ios objective-c nsstring


【解决方案1】:

这不包括以下字符串,但它应该可以帮助您入门。

"长字符串" - 开头没有字符"

“字符串很长” - 结尾没有字符

"This is a long long string" - 双重查找查询字符串

“长” - 少于 10 个字符

"No instance of loong" - 没有搜索字符串的实例。

NSString *s = @"this is an example of my long string";
NSString *searchString = @"long";
NSRange range = [[s lowercaseString] rangeOfString:searchString];

range.location -= (10 - (searchString.length)) / 2;
range.length = 10;

NSLog(@"%@", [s substringWithRange:range]);

【讨论】:

    【解决方案2】:

    只要字符串不包含多次定义的分隔符,这应该是正确的:

    NSString *string = @"This is an example of my LONG string.";
    
    NSString *separator = @"long";
    
    NSInteger desiredLength = 10;
    
    NSRange range = [[string lowercaseString] rangeOfString:separator];
    
    if(range.location != NSNotFound)
    {
        NSInteger remainder = (desiredLength - [separator length]);
    
        NSInteger halfRemainder = (remainder / 2);
    
        range = NSMakeRange((range.location - halfRemainder), (range.length + remainder));
    
        NSString *result = [string substringWithRange:range];
    
        NSLog(@"result: %@", result);
    }
    

    result: my LONG st

    这应该是相当可定制的以满足您的需求。

    此外,可能值得检查 halfRemainder 没有尝试除以奇数(即 5 / 2),因为它被强制转换为整数,这可能会导致超出范围异常的问题。

    【讨论】:

      【解决方案3】:
      NSString *theEntireString = @"afsfaof";
      
      NSRange textRange = [[theEntireString lowercaseString] rangeOfString:@"long"];
      if (textRange.length < 10) {
          NSRange finalRange = NSMakeRange((10-textRange.length)/2, 10);
      }else{
          NSString *subString = [theEntireString substringWithRange:textRange];
      }
      

      【讨论】:

        猜你喜欢
        • 2012-01-19
        • 2022-11-11
        • 1970-01-01
        • 1970-01-01
        • 2022-11-01
        • 1970-01-01
        • 2016-07-08
        • 2013-11-25
        相关资源
        最近更新 更多