我有一个数组,其中包含地图上路线的描述。我通过解析JSON得到了这个数组。我的数组包含以下格式的字符串:
"<b>Sri Krishna Nagar Rd</b> \U306b\U5411\U304b\U3063\U3066<b>\U5317\U6771</b>\U306b\U9032\U3080",
"\U53f3\U6298\U3057\U3066\U305d\U306e\U307e\U307e <b>Sri Krishna Nagar Rd</b> \U3092\U9032\U3080",
"\U5927\U304d\U304f\U5de6\U65b9\U5411\U306b\U66f2\U304c\U308a\U305d\U306e\U307e\U307e <b>Bailey Rd/<wbr/>NH 30</b> \U3092\U9032\U3080<div class=\"\">\U305d\U306e\U307e\U307e NH 30 \U3092\U9032\U3080</div><div class=\"google_note\">\n<b landmarkid=\"0x39ed57bfe47253b7:0x779c8bf48892f269\" class=\"dir-landmark\">Petrol Bunk</b>\U3092\U901a\U904e\U3059\U308b<div class=\"dirseg-sub\">\Uff083.9 km \U5148\U3001\U53f3\U624b\Uff09</div>\n</div>",
现在我想从Sri Krishna Nagar Rd
,NH 30 Petrol Bunk
获取此数组中的地点名称。前两个应该提供Sri Krishna Nagar Rd
,最后一个应该给NH 30 Petrol
Bunk
我怎么能得到这样的结果。任何帮助将不胜感激。 Thanx In Advance。
再次,假设我有这种格式的字符串... "\U5de6\U6298\U3059\U308b"
,它没有地名。我将如何处理这种情况。
答案 0 :(得分:5)
You can get like below:
NSString *strName=[yourArray objectAtIndex:index];
NSString *yourPlaceString=[[strName componentsSeparatedByString:@"<b>"] objectAtIndex:1];
yourPlaceString=[[yourPlaceString componentsSeparatedByString:@"</b>"] objectAtIndex:0];
you can get all places like this.
答案 1 :(得分:3)
首先,您应该检查您是否没有任何其他更清洁的API可供您查询此数据的服务。如果服务在其JSON响应中返回了这样的垃圾,那么这不应该是你清理那个烂摊子的责任:如果它是真正干净的API,服务应该返回一些更有用的文本。
接下来,如果你真的没有其他选择并且真的需要清理这个文本,你有两个选择:
NSXMLParser
过滤掉任何标记,只保留字符串中的文本。无论如何这可能有点太多了,所以我真的不推荐它。NSRegularExpression
类来实现此目的。棘手的部分是获得正确的正则表达式(如果需要可以帮助你)NSScanner
类(自2.0 IIRC以来在iOS中可用)扫描字符串中的字符并解析它。如果你不是正则表达式专家,这可能更容易理解和走的路,所以我推荐这种方法例如,如果您选择NSScanner
解决方案,则可以扫描字符串中的字母数字字符集中的字符,扫描字母和数字并累积它(您还可以为您的{添加ponctuation字符) {1}}如果需要,您正在使用。当遇到诸如unicode字符\ Uxxxx或类似NSCharacterSet
和NSScanner
之类的字符时,您将<
停止。当您遇到>
时,您可以要求<
忽略下一个NSScanner
之前的字符,然后再次开始扫描字母数字字符并累积......依此类推,直到字符串的结尾。
最后,如果您确实在收到的回复字符串中找到了一个模式,就好像您的地名始终位于第一个>
和<b>
对之间(但您必须确定),您可以通过其他方式处理它,例如:
</b>
文字作为分隔符(例如<b>
)componentsSeparatedByString
询问字符串rangeOfString
,然后询问字符串<b>
,一旦获得其位置,只需从原始字符串中提取</b>
以仅提取字符substringWithRange
地名(使用rangeOfString
会比componentsSeparatedByString
更快,因为它会在第一次发现时停止) 答案 2 :(得分:1)
它看起来像编码问题 - 您可以将源或目标的编码更改为其他格式。当关闭UTF-8时,我遇到了德语öäü字符的类似问题....