Objective c 跳过转义分隔符将字符串拆分为标记的最佳方法?
我收到一个Objective c 跳过转义分隔符将字符串拆分为标记的最佳方法?,objective-c,split,delimiter,escaping,Objective C,Split,Delimiter,Escaping,我收到一个NSString,它使用逗号作为分隔符,并使用反斜杠作为转义字符。我正在研究使用componentsSeparatedByString拆分字符串,但是我没有找到指定转义字符的方法。有没有一种内在的方法可以做到这一点?NSScanner?CFStringTokenizer 如果不是,最好是在逗号处拆分字符串,然后重新连接错误拆分的标记(在末尾检查它们是否有(非转义的)转义字符后),或者在每个字符之间循环尝试查找逗号,然后返回一个字符以查看逗号是否转义(然后再添加一个字符以查看转义字符是否
NSString
,它使用逗号作为分隔符,并使用反斜杠作为转义字符。我正在研究使用componentsSeparatedByString
拆分字符串,但是我没有找到指定转义字符的方法。有没有一种内在的方法可以做到这一点?NSScanner?CFStringTokenizer
如果不是,最好是在逗号处拆分字符串,然后重新连接错误拆分的标记(在末尾检查它们是否有(非转义的)转义字符后),或者在每个字符之间循环尝试查找逗号,然后返回一个字符以查看逗号是否转义(然后再添加一个字符以查看转义字符是否转义)
现在考虑一下,我需要检查分隔符之前的转义字符数是否为偶数,因为只有之后分隔符本身才不会被转义
如果有人有这样的方法,如果我能看一看的话,我会很感激的。我认为最简单的方法是按照您的建议逐个字符地检查字符串,并添加到新的字符串对象中。您可以遵循两个简单的规则:
您可以手动执行此操作,也可以使用NSScanner的一些功能来帮助您(ScanupCharactersFromSet:intoString:)我认为最简单的方法是按照您的建议逐个字符地检查字符串,并添加到新的字符串对象中。您可以遵循两个简单的规则:
您可以手动执行此操作,也可以使用NSScanner的某些功能来帮助您(scanupCharactersFromSet:intoString:)我更喜欢使用基于正则表达式的解析器来删除转义字符,然后可能执行拆分操作(某种类型)在字符串上。我更喜欢使用基于正则表达式的解析器删除转义字符,然后可能对字符串执行拆分操作(某种类型)。好的,(我希望)这是wipolar建议的。这是第一个有效的实现。我刚开始使用一种非GC收集语言,所以如果您认为这段代码可以改进,请发表评论,特别是在内存管理部门
- (NSArray *) splitUnescapedCharsFrom: (NSString *) str atChar: (char) delim withEscape: (char) esc
{
NSMutableArray * result = [[NSMutableArray alloc] init];
NSMutableString * currWord = [[NSMutableString alloc] init];
for (int i = 0; i < [str length]; i++)
{
if ([str characterAtIndex:i] == esc)
{
[currWord appendFormat:@"%c", [str characterAtIndex:++i]];
}
else if ([str characterAtIndex:i] == delim)
{
[result addObject:[NSString stringWithString:currWord]];
[currWord release];
currWord = [[NSMutableString alloc] init];
}
else
{
[currWord appendFormat:@"%c", [str characterAtIndex:i]];
}
}
[result addObject:[NSString stringWithString:currWord]];
[currWord release];
return [NSArray arrayWithArray:result];
}
-(NSArray*)splitUnescapedCharsFrom:(NSString*)str atChar:(char)delim with escape:(char)esc
{
NSMUTABLEARRY*结果=[[NSMUTABLEARRY alloc]init];
NSMutableString*currWord=[[NSMutableString alloc]init];
对于(int i=0;i<[str length];i++)
{
如果([str characterAtIndex:i]==esc)
{
[currWord appendFormat:@“%c”,[str characterAtIndex:++i]];
}
else if([str characterAtIndex:i]==delim)
{
[结果添加对象:[NSString stringWithString:currWord]];
[文字发布];
currWord=[[NSMutableString alloc]init];
}
其他的
{
[currWord appendFormat:@“%c”,[str characterAtIndex:i]];
}
}
[结果添加对象:[NSString stringWithString:currWord]];
[文字发布];
返回[NSArray arrayWithArray:result];
}
好的,(我希望)这是wipolar建议的。这是第一个有效的实现。我刚刚开始使用非GC收集语言,因此如果您认为此代码可以改进,请发表评论,特别是在内存管理部门
- (NSArray *) splitUnescapedCharsFrom: (NSString *) str atChar: (char) delim withEscape: (char) esc
{
NSMutableArray * result = [[NSMutableArray alloc] init];
NSMutableString * currWord = [[NSMutableString alloc] init];
for (int i = 0; i < [str length]; i++)
{
if ([str characterAtIndex:i] == esc)
{
[currWord appendFormat:@"%c", [str characterAtIndex:++i]];
}
else if ([str characterAtIndex:i] == delim)
{
[result addObject:[NSString stringWithString:currWord]];
[currWord release];
currWord = [[NSMutableString alloc] init];
}
else
{
[currWord appendFormat:@"%c", [str characterAtIndex:i]];
}
}
[result addObject:[NSString stringWithString:currWord]];
[currWord release];
return [NSArray arrayWithArray:result];
}
-(NSArray*)splitUnescapedCharsFrom:(NSString*)str atChar:(char)delim with escape:(char)esc
{
NSMUTABLEARRY*结果=[[NSMUTABLEARRY alloc]init];
NSMutableString*currWord=[[NSMutableString alloc]init];
对于(int i=0;i<[str length];i++)
{
如果([str characterAtIndex:i]==esc)
{
[currWord appendFormat:@“%c”,[str characterAtIndex:++i]];
}
else if([str characterAtIndex:i]==delim)
{
[结果添加对象:[NSString stringWithString:currWord]];
[文字发布];
currWord=[[NSMutableString alloc]init];
}
其他的
{
[currWord appendFormat:@“%c”,[str characterAtIndex:i]];
}
}
[结果添加对象:[NSString stringWithString:currWord]];
[文字发布];
返回[NSArray arrayWithArray:result];
}
谢谢,我几乎完成了对原始帖子中描述的内容的编码,但我认为您的解决方案更快、更容易实现。我很困惑,没有框架函数来实现这一点,我本以为它会更常见。谢谢,我几乎完成了对原始帖子中描述的内容的编码,但我认为您的解决方案很快呃,而且更容易实现。我很困惑,没有框架函数来实现这一点,我本以为它会更常见。