iOS - 将数组元素的一部分转换为字符串
Posted
技术标签:
【中文标题】iOS - 将数组元素的一部分转换为字符串【英文标题】:iOS - Convert part of an Array Element into a String 【发布时间】:2013-06-20 21:46:15 【问题描述】:所以我松散地遵循this tutorial 将 html 解析为 Master/Detail 应用程序。
我正在尝试将 NSArray 更改为 NSString,但唯一的数组元素(只有一个元素)似乎没有被完全解析。
我的代码:
viewcontroller.h:
#import <UIKit/UIKit.h>
@interface viciViewController : UIViewController
IBOutlet UITextView *label;
IBOutlet UITextField *textfield;
IBOutlet UITextView *translation;
IBOutlet UIButton *transButton;
BOOL connectedToInternet;
-(IBAction)translateButton;
@end
viewcontroller.m:
#import "viciViewController.h"
#import "TFHpple.h"
@interface viciViewController ()
@end
@implementation viciViewController
- (BOOL)connectedToInternet
NSURL *url=[NSURL URLWithString:@"http://www.google.com"];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error: NULL];
return ([response statusCode]==200)?YES:NO;
-(IBAction)translateButton
if ([self connectedToInternet] == NO)
translation.text = @"Sorry, you need an internet connection to translate.";
// Not connected to the internet
else
// Connected to the internet
[textfield resignFirstResponder];
NSString *toTranslate = self->textfield.text;
NSString *url = [NSString stringWithFormat:@"http://www.archives.nd.edu/cgi-bin/wordz.pl?keyword=%@", toTranslate];
NSURL *translationUrl = [NSURL URLWithString:(url)];
NSData *translationHtmlData = [NSData dataWithContentsOfURL:translationUrl];
TFHpple *translationParser = [TFHpple hppleWithHTMLData:translationHtmlData];
// 3
NSString *translationXpathQueryString = @"/html/body/pre";
NSArray *translationOutput = [translationParser searchWithXPathQuery:translationXpathQueryString];
NSString * result = [[translationOutput valueForKey:@"description"] componentsJoinedByString:@""];
NSLog(@"Response %@", result);
控制台中的日志显示:
Response
nodeChildArray = (
nodeContent = "\nsemper ADV POS \nsemper ADV [XXXAX] \nalways;\n\n";
nodeName = text;
);
nodeName = pre;
raw = "<pre>\nsemper ADV POS \nsemper ADV [XXXAX] \nalways;\n\n</pre>";
那么,问题:是否可以将 just nodeContent 作为 NSString 并将 \n
转换为回车符?
感谢大家的帮助!
【问题讨论】:
将数组转储到控制台 - 打印出来 - 然后弄清楚如何格式化我假设的字符串数组。您可以创建一个 NSMutableString 然后继续加载它,完成后将其添加到 TextView 并完成。 @DavidH 这只是一个元素,还有什么??? 你看到这条线了吗: NSArray *translationOutput = ... ?啊,你的意思是数组只有一个元素 - 所以打印出来并更新你的问题。 【参考方案1】:TFHppleElement
正是这样做的:
替换您的代码中的以下行
NSString * result = [[translationOutput valueForKey:@"description"] componentsJoinedByString:@""];
NSLog(@"Response %@", result);
以下内容:
NSString *translatedString = ((TFHppleElement *)translationOutput[0]).firstChild.content;
NSLog(@"%@", translatedString);
别忘了加上TFHppleElement.h
输出
如果发送semper
,则存储在translatedString
中的解析结果为
semper ADV POS semper ADV [XXXAX] 总是;
【讨论】:
我试过了,控制台输出(null)
。有什么想法吗?
它在我的机器上运行;)。我认为您没有发送正确的网址。请问NSLog()
你的NSString
url
好吗?看看是不是像http://www.archives.nd.edu/cgi-bin/wordz.pl?keyword=semper
?
我已经编辑了我的答案。请在您的机器上执行相同的操作。该方法放置在您的 AppDelegate 中。你现在得到结果了吗?
顺便说一句:您应该开始使用属性并通过其 getter 和 setter 访问诸如 self->textfield.text
之类的值;)
但是如何将toTranslate
的值设置为文本字段中的文本?【参考方案2】:
所以你有一个字典,向它询问 nodeChildArray 对象,向该数组询问其第一个对象,向该字典询问其节点内容。现在你有一个字符串。使用给定子字符串(@"\n",两个反斜杠)分解字符串的 NSString 方法,现在您得到一个字符串数组。遍历所有内容,再次使用字符串方法删除前导和尾随空格。如果字符串有长度,您可以再次获取由空格分隔的字符串数组或使用 NSScanner 来完成。
【讨论】:
以上是关于iOS - 将数组元素的一部分转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章