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()你的NSStringurl好吗?看看是不是像http://www.archives.nd.edu/cgi-bin/wordz.pl?keyword=semper 我已经编辑了我的答案。请在您的机器上执行相同的操作。该方法放置在您的 AppDelegate 中。你现在得到结果了吗? 顺便说一句:您应该开始使用属性并通过其 getter 和 setter 访问诸如 self-&gt;textfield.text 之类的值;) 但是如何将toTranslate 的值设置为文本字段中的文本?【参考方案2】:

所以你有一个字典,向它询问 nodeChildArray 对象,向该数组询问其第一个对象,向该字典询问其节点内容。现在你有一个字符串。使用给定子字符串(@"\n",两个反斜杠)分解字符串的 NSString 方法,现在您得到一个字符串数组。遍历所有内容,再次使用字符串方法删除前导和尾随空格。如果字符串有长度,您可以再次获取由空格分隔的字符串数组或使用 NSScanner 来完成。

【讨论】:

以上是关于iOS - 将数组元素的一部分转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将json字符串转换为元素数组?

获取UIImage,将其转换为多部分图像字符串,写入文本文件iOS

java中图像与数组转换

将字符串转换为数组,删除 + 字符 [重复]

js字符串每个数组前面数字转换为多少个数组

js 数组操作