Objective c 正在尝试将某些文本解析为数组
我将此文本读入一个NSString*响应,我正试图将其解析为一个数组Objective c 正在尝试将某些文本解析为数组,objective-c,ios,xcode,nsstring,nsarray,Objective C,Ios,Xcode,Nsstring,Nsarray,我将此文本读入一个NSString*响应,我正试图将其解析为一个数组 total: used: free: shared: buffers: cached: Mem: 30412800 16805888 13606912 0 1581056 4837376 Swap: 0 0 0 MemTotal: 29700 kB MemFree: 13288 kB MemShared:
total: used: free: shared: buffers: cached:
Mem: 30412800 16805888 13606912 0 1581056 4837376
Swap: 0 0 0
MemTotal: 29700 kB
MemFree: 13288 kB
MemShared: 0 kB
Buffers: 1544 kB
Cached: 4724 kB
SwapCached: 0 kB
Active: 1197 kB
Inactive: 699 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 29700 kB
LowFree: 13288 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
Mapped: 277 kB
Slab: 132 kB
CommitLimit: 14848 kB
Committed_AS: 3400 kB
PageTables: 1567 kB
VmallocTotal: 1048404 kB
VmallocUsed: 17208 kB
VmallocChunk: 1031168 kB
如果我读入这样一个数组,数组中会有300多个对象
NSMutableArray *items2 = [NSMutableArray arrayWithArray:[responce componentsSeparatedByString:@" "]];
NSLog(@"count of memory array = %i",[items2 count]);
我添加了它来尝试删除所有空白的,但最终还是以170。
for (int i=0; i<[items2 count]; i++) {
NSString *str = [items2 objectAtIndex:i];
if([str length]==0 || !str || str==nil) {
[items2 removeObjectAtIndex:i];
}
}
for(inti=0;i这是预期的。以下是NSArray类引用必须说明的内容:
数组中的子字符串按其在接收器中的顺序显示。分隔符字符串的相邻出现会在结果中产生空字符串。类似地,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。例如,此代码段:
另外,如果先将输入拆分为行,然后再按空格拆分,不是更容易吗?这是意料之中的。下面是NSArray类参考必须说明的内容:
数组中的子字符串按其在接收器中的顺序显示。分隔符字符串的相邻出现会在结果中产生空字符串。类似地,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。例如,此代码段:
另外,如果先将输入拆分为行,然后按空格拆分,不是更容易吗?首先,使用NSScanner从字符串实例获取信息。默认情况下,扫描仪跳过空格和换行符
第二,似乎你的信息的前两行包含了比后面的行更多的信息。考虑到这个不一致,你可以考虑创建一个模型类来保存你的数据,而不是一个简单的数组。
祝您好运。首先,使用NSScanner从字符串实例获取您的信息。默认情况下,扫描仪跳过空格和换行符
第二,似乎你的信息的前两行包含了比后面的行更多的信息。考虑到这个不一致,你可以考虑创建一个模型类来保存你的数据,而不是一个简单的数组。
祝您好运。如果字符串中的每两项之间有新行字符,您可以使用:
NSArray *array = [yourResponseString componentsSeparatedByString:@"\n"];
另外,如果在每种情况下不是分隔两个组件的换行符,则需要找到分隔数组中两个元素的分隔符
希望这对您有所帮助。如果字符串中每两项之间有新行字符,您可以使用:
NSArray *array = [yourResponseString componentsSeparatedByString:@"\n"];
另外,如果在每种情况下不是分隔两个组件的换行符,则需要找到分隔数组中两个元素的分隔符
希望这对您有所帮助。您编写的代码将每个空格视为字段分隔符(提供大量空字段),而您试图解析的数据将任意数量的空格视为字段分隔符。您可以使用NSScanner或NSRegularExpression跳过任意数量的空格。您编写的代码将每个空格视为字段分隔符(提供大量空字段),而您试图解析的数据将任意数量的空格视为字段分隔符。您可以使用NSScanner或NSRegularExpression跳过任意数量的空格。看起来您真正想要的是NSDictionary
+NSScanner
:
NSDictionary *scanString(NSString *str)
{
NSScanner *scanner = [NSScanner scannerWithString:str];
NSMutableDictionary *results = [NSMutableDictionary dictionary];
// read away the first three lines (headers, mem, and swap). If you need this data, parse it here.
for (int i = 0; i < 3; i++) {
[scanner scanUpToString:@"\n" intoString:NULL];
}
NSString *line = nil;
while ([scanner scanUpToString:@"\n" intoString:&line]) {
// trim the line
line = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// read up to the ':'
int loc = [line rangeOfString:@":"].location;
NSString *key = [line substringToIndex:loc];
// read the value associated with the key
NSString *value = [[line substringFromIndex:loc + 1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
value = [value substringToIndex:[value rangeOfString:@" "].location];
[results setObject:value forKey:key];
}
return results;
}
看起来您真正想要的是一个NSDictionary
+NSScanner
:
NSDictionary *scanString(NSString *str)
{
NSScanner *scanner = [NSScanner scannerWithString:str];
NSMutableDictionary *results = [NSMutableDictionary dictionary];
// read away the first three lines (headers, mem, and swap). If you need this data, parse it here.
for (int i = 0; i < 3; i++) {
[scanner scanUpToString:@"\n" intoString:NULL];
}
NSString *line = nil;
while ([scanner scanUpToString:@"\n" intoString:&line]) {
// trim the line
line = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// read up to the ':'
int loc = [line rangeOfString:@":"].location;
NSString *key = [line substringToIndex:loc];
// read the value associated with the key
NSString *value = [[line substringFromIndex:loc + 1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
value = [value substringToIndex:[value rangeOfString:@" "].location];
[results setObject:value forKey:key];
}
return results;
}
@ParthBhatt每次添加答案时他都会收到通知。你不需要在他的帖子上的评论中拉皮条。Flagged.@RichardJ.RossIII:无论如何,这不是出于那种意图。@ParthBhatt每次添加答案时他都会收到通知。你不需要在他的帖子上的评论中拉皮条。Flagged@Ri无论如何,这并不是出于那种目的。谢谢。我确实希望将空格放在单个对象中,但我不明白为什么我删除长度为零的代码不能将它们全部删除。谢谢。我确实希望将空格放在单个对象中,但我不明白为什么我删除长度为零的代码不能将它们全部删除不要全部删除。非常好的回答,谢谢。非常好。比我要求的要多。干杯。@darren这就是我们来这里的目的。回答你的问题,并超出你的期望。所有这些都需要一点代表性。非常好的回答,谢谢。非常好。比我要求的多。干杯。@darren这就是我们来这里的目的。回答你的问题,并超越你的期望,这一切都是为了一点点的成功。