书上写的很不全 看了些资料。
转自:http://hi.baidu.com/feng20068123/item/4caf1f0337bd5c3ba3332ac0
NSScanner类用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串。可以在创建NSScaner时指定它的string属性,然后scanner会按照你的要求从头到尾地扫描这个字符串的每个字符。
创建一个Scanner
NSScanner是一个类族, NSScanner是其中公开的一类。通常,可以用scannerWithString:或localizedScannerWithString:方法初始化一个scanner。这两个方法都返回一个scanner对象并用你传递的字符串参数初始化其string属性。刚创建时scanner对象指向字符串的开头。scan...方法开始扫描,比如scanInt:,scanDouble:,scanString:intoString:。如果你要想扫描多遍,通常需要使用while循环,例如如下代码所示:
float aFloat;
NSScanner *theScanner = [NSScanner scannerWithString:aString];
while ([theScanner isAtEnd] == NO) {
[theScanner scanFloat:&aFloat];
// implementation continues...
}
可以通过setCaseSensitive:方法设置是否忽略大小写,默认是忽略。
Scanner的使用
扫描操作从上次扫描的位置开始,并且继续往后扫描直到指定的内容出现为止(如果有的话)。以字符串“137 small cases of bananas”为例,在扫描完一个证书之后,scanner的位置将变为3,也即数字后面的空格处。通常,你会继续扫描并跳过你不关心的字符。那么你可以用setScanLocation:方法跳过某几个字符(也可以用这个方法在发生某些错误后,重新开始扫描字符串的某部分)。如果你想跳过某种特殊的字符集中的字符时,可以使用setCharactersToBeSkipped:方法。scanner在任何扫描操作时会跳过空白字符之后才开始。但是当它找到一个可以扫描的字符时,它会用全部字符去和指定内容匹配。scanner默认情况下会忽略空白字符和换行符。注意,对于忽略字符,总是大小写敏感的。例如要忽略所有原音字母,你必须使用“AEIOUaeiou”,而不能仅仅是“AEIOU”或“aeiou”。
如果你想获取当前位置的某个字符串的内容,可以使用scanUpToString:intoString:方法(如果你不想保留这些字符,可以传递一个NULL给第2个参数)。例如,以下列字符串为例:
137 small cases of bananas
下面的代码,可以从字符串中找出包装规格(small cases)和包装数量(137)。
NSString *bananas = @"137 small cases of bananas";
NSString *separatorString = @" of";
NSScanner *aScanner = [NSScanner scannerWithString:bananas];
NSInteger anInteger;
[aScanner scanInteger:&anInteger];
NSString *container;
[aScanner scanUpToString:separatorString intoString:&container];
查找字符串separatorString为“ of”关系重大。默认scanner会忽略空白字符,因此在数字137后面的空格被忽略。但是当scanner从空格后面的字符开始时,所有的字符都被加到了输出字符串中,一直到遇到搜索字符串(“of”)。
如果搜索字符串是“of”(前面没空格),container的第一个值应该是“smallcases ”(后面有个空格);如果搜索字符串是“ of”(前面有空格),则container的第1个值是“small cases”(后面无空格)。
在扫描到指定字符串(搜索字符串)之后,scanner的位置指向了该字符串开始处。如果你想继续扫描该字符串之后的字符,必须先扫描指定字符串(搜索字符串)。下列代码演示了如何跳过搜索字串并取得产品类型。注意我们使用了substringFromIndex:,等同于继续扫描直到整个字符串的末尾。
[aScanner scanString:separatorString intoString:NULL];
NSString *product;
product = [[aScanner string] substringFromIndex:[aScanner scanLocation]];
// could also use:
// product = [bananas substringFromIndex:[aScanner scanLocation]];
示例
假设你有如下字符串:
Product: Acme Potato Peeler; Cost: 0.98 73
Product: Chef Pierre Pasta Fork; Cost: 0.75 19
Product: Chef Pierre Colander; Cost: 1.27 2
以下代码演示了读取产品名称和价格的操作(价格简单地读作一个float),跳过“Product:”和“Cost:"子串,以及分号。注意,因为scanner默认忽略空白字符和换行符,循环中没有指定对它们的处理(尤其对于读取末尾的整数而言,并不需要处理额外的空白字符)。
NSString *string = @"Product: Acme Potato Peeler; Cost: 0.98 73\n\
Product: Chef Pierre Pasta Fork; Cost: 0.75 19\n\
Product: Chef Pierre Colander; Cost: 1.27 2\n";
NSCharacterSet *semicolonSet;
NSScanner *theScanner;
NSString *PRODUCT = @"Product:";
NSString *COST = @"Cost:";
NSString *productName;
float productCost;
NSInteger productSold;
semicolonSet = [NSCharacterSet characterSetWithCharactersInString:@";"];
theScanner = [NSScanner scannerWithString:string];
while ([theScanner isAtEnd] == NO)
{
if ([theScanner scanString:PRODUCT intoString:NULL] &&
[theScanner scanUpToCharactersFromSet:semicolonSet
intoString:&productName] &&
[theScanner scanString:@";" intoString:NULL] &&
[theScanner scanString:COST intoString:NULL] &&
[theScanner scanFloat:&productCost] &&
[theScanner scanInteger:&productSold])
{
NSLog(@"Sales of %@: $%1.2f", productName, productCost * productSold);
}
}
本地化
Scanner支持本地化的扫描,可以指定语言和方言。NSScanner只在小数点分隔符上使用locale属性(以NSDecimalSeparator为key)。你可以用lcoalizedScannerWithString:创建指定locale的scanner,或者用setLocale:方法显示地指定scanner的locale属性。如果你不指定locale,scanner假定使用默认的locale。
//通过NSScanner读取text文档
NSString *tmp;
NSArray *lines; /*将文件转化为一行一行的*/
lines = [[NSString stringWithContentsOfFile:@"testFileReadLines.txt"]
componentsSeparatedByString:@”\n”];
NSEnumerator *nse = [lines objectEnumerator];//创建一个枚举器
// 读取<>里的内容
while(tmp = [nse nextObject]) {
NSString *stringBetweenBrackets = nil;
NSScanner *scanner = [NSScanner scannerWithString:tmp];
[scanner scanUpToString:@"<" intoString:nil];
[scanner scanString:@"<" intoString:nil];
[scanner scanUpToString:@">" intoString:&stringBetweenBrackets];
NSLog([stringBetweenBrackets description]);
}
相关推荐
深度集成 OBC+DCDC 拓扑方案 深度集成 OBC+DCDC 拓扑方案是指一种高效、可靠的电源解决方案,旨在满足现代工业和民用电子产品的电源需求。该方案的核心是 OBC(On-Board Charger)和 DCDC(DC-DC Converter)两个...
车载DC/DC电源,又称为DC/DC转换器,它的主要任务是将电池的高压直流电转换为低压直流电,供车辆的低压电气系统如照明、空调等使用。常见的电路拓扑有升压、降压和隔离型拓扑,如BUCK、BOOST、BUCK-BOOST、Flyback、...
碳化硅SiC MOSFET OBC应用技术是指使用碳化硅(SiC)材料制成的MOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor)在OBC(On-Board Charger)应用中的技术。下面将对该技术进行详细的介绍。 首先,...
车载充电器 (OBC)是插电式混合动力汽车和纯电动汽车中一个必不可少的系统。在本文中,我们讨论了车载充电的系统结构和可行拓扑,并为 OBC 推荐了合适的功率半导体选择。目录 摘要 目录 1 简介 2 车载充电概览 。 ...
新能源汽车车载双向OBC,PFC,LLC,V2G 双向 充电桩 电动汽车 车载充电机 充放电机 MATLAB仿真模型 : (1)基于V2G技术的双向AC DC、DC DC充放电机MATLAB仿真模型; (2)前级电路为双向AC DC单相PWM整流器,输入AC...
新能源6.6KW7KW 3.3KW 11KW车载充电机OBC开关电源设计方案 另有15KW ai默生 数字控制:电压电流环控制核心算法 PFC?LLC采用TMS320F28035芯片 3.3KW车载充电机开关电源设计方案资料数字控制单相PFC与全桥LLC 2、新能源...
为了克服这些挑战,双闭环数字控制方法被引入到LLC转换器中。双闭环控制包括电压环和电流环,可以提供更精确的系统响应和更好的动态性能。电压环负责维持输出电压的稳定,而电流环则确保输入电流的精确控制,防止...
在电动汽车领域,OBC(On-Board Charger,车载充电机)和DCDC(Direct Current to Direct Current,直流到直流转换器)是两个至关重要的组成部分。本资料“深度集成OBC%2BDCDC拓扑方案”探讨了如何将这两者进行高效...
标题中的"obc.cpp.rar_2PG_C++_The Number_combinations_obc"暗示了这是一个关于C++编程的项目,具体涉及2阶段编程(2PG)和对象基础类(OBC),以及组合数学中关于数字组合的问题。描述中的"specific Due to the ...
"电动汽车OBC与DCDC集成式产品研究.pdf" 本文研究了电动汽车OBC(On-Board Charger)与DCDC(DC-DC Converter)集成式产品的设计方案。该产品集成了车载充电机和DCDC变换器的功能,通过集成设计,能够对车辆整体...
此外,使用宽禁带半导体材料如硅碳化物(SiC)MOSFET可以显著降低开关损耗,提高系统效率,尤其在高电压和高频操作下。 其次,OBC的设计必须考虑到热管理,因为高功率工作会产生大量热量。例如,Infineon的CoolSiC...
3. 使用`context.addEllipse(in:)`方法添加一个椭圆路径,这个椭圆的边界框同样是一个`CGRect`,但可以调整使其成为一个完美的圆形。 4. 最后,通过设置填充色或描边色,调用`context.fill()`或`context.stroke()`来...
OBC_PFC_POWER_SCHEMATIC.PDF 本资源是一个关于PFC(Power Factor Correction,功率因数校正)电路的设计方案,主要应用在风扇解决方案中。该方案由安森美(ON Semiconductor)公司提供,解决方案工程中心的Stefan ...
OBC_TECS.sln
7. **软件设计**:编写实时操作系统(RTOS)或者使用TI提供的SimpleLink SDK,进行任务调度、错误处理和通信协议栈的实现。良好的软件架构可以提高系统的可靠性。 8. **热设计**:立方星在太空中可能会经历极端温度...
OBC_PFC_LLC
OBC车载充电机6.6kw,国内OBC车载充电机NO.1 硬件原理图和软件源码符合15年国标。