代码之家  ›  专栏  ›  技术社区  ›  G. Kim

替换包含目标C中变量的字符串的特定部分

  •  0
  • G. Kim  · 技术社区  · 7 年前

    我花了几个小时试图弄明白这件事,但运气不好。 我有一个字符串,叫它 ,其中包含需要修改的UTF-8编码文件的内容。

    文件内容

    随机长度的随机数字和字母 唯一标识单个用户的会话。

    这是变量在读取到的文件部分中的显示方式 文件内容 :

    +option1 (variable) +option2
    

    周围的文本(+option1和+option2)和空白是恒定的,便于手动定位。这一部分是必须保持完整的较长线路的一部分。

    值+选项1+选项2无效。

    我尝试了 documentation 我在其他回答的问题中发现了它们的各种组合,例如。

    ".*\+option1 (.*) \+option2.*". 
    

    我是否应该使用NSRange或NSScanner,或者完全不同的东西?

    1 回复  |  直到 7 年前
        1
  •  0
  •   GeneCode    7 年前

    // FileContent now holds ".... +option1 yourString +option2 ...."
    
    int idx1 = [FileContent rangeOfString:@"+option1"].location;
    int idx2 = [FileContent rangeOfString:@"+option2"].location;
    int len2 = [@"+option2" length];
    
    if ((idx1>=0)&&(idx2>=0)) {
       NSString *str= [FileContent substringWithRange:NSMakeRange(idx1, idx2+len2-idx1)];
       // now str holds "+option1 yourString +option2"
    
       // split this into array
       NSArray *arr = [str componentsSeparatedByString:@" "];
    
       // now array arr has [+option1,yourString,+option2]
       // So you can get your string by arr[1];
       NSLog(@"MyString %@",arr[1]);
    }
    

    请注意,如果选项1和2的名称发生更改,或者它们的顺序发生了更改,则会中断。还要注意,我还没有测试这段代码。它可能在nsmakerange区域破裂。。。务必正确检查索引/长度。