替换NSString特定部分中的文本

时间:2016-09-23 22:07:56

标签: objective-c cocoa

是否可以更改NSString特定部分内的文本?例如,我想使用stringByReplacingOccurrencesOfString,但仅限于字符串的某个部分。在此示例中,我只想在#之后和#q=之前替换&lang=en-us。像这样:

初始字符串:https://google.com/search#q=hello#&lang=en-us

应该替换为:https://google.com/search#q=hello%23&lang=en-us

如果我告诉stringByReplacingOccurrencesOfString#取代%23,那么使用https://google.com/search%23q=hello%23&lang=en-us会返回什么:import lucee.runtime.type; public class MyClass { public lucee.runtime.type.Struct test () { // I was hoping to do this, but I get an error lucee.runtime.type.Struct myStruct = new lucee.runtime.type.Struct(); myStruct.put("passed", true); return(myStruct); } // test() }

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您问题的直接答案是肯定的,您可以使用stringByReplacingOccurrencesOfString:withString:options:range:; range参数指定应在其中进行替换的字符串部分。

NSString提供了其他搜索方法,可帮助您确定range的合适值。

上面说过你的方法可能很脆弱"脆弱" - 随着输入数据的变化,容易发生断裂 - 也许你应该把字符串视为它是什么,一个URL,并且首先用适当的转义来构造它;或者将其解析为其部分,添加转义,然后重新组合。 NSURLNSString上的方法可以帮助您实现这一目标。

HTH

答案 1 :(得分:0)

好像你想对现有字符串进行URL编码

NSString *input = @"https://google.com/search#q=hello%23&lang=en-us";
NSURL *url = @"https://google.com/search#q=hello%23&lang=en-us";
NSString *params = [url parameterString];
NSString *enc = [params stringByAddingPercentEscapesUsingEncoding:
 NSUTF8StringEncoding];
//append URLs host+path with enc

在上面的代码中没有进行错误检查,只提供了想法