博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速简易的分解歌词文件
阅读量:4537 次
发布时间:2019-06-08

本文共 6679 字,大约阅读时间需要 22 分钟。

快速简易的分解歌词文件

以下是一个歌词文件,如何快速的分解出来呢?

李克勤 - 月半夜小夜曲.lrc

[ti:月半夜小夜曲][ar:李克勤][by:TTPod][00:01.48]月半小夜曲[00:05.66]作词:向雪怀[00:10.66]作曲:河合奈保子[00:15.63]演唱:李克勤[00:20.63][00:24.56]仍然倚在失眠夜望天边星宿[00:30.46]仍然听见小提琴如泣似诉再挑逗[00:36.30]为何只剩一弯月留在我的天空[00:42.92]这晚以后音讯隔绝[00:48.29]人如天上的明月是不可拥有[00:54.26]情如曲过只遗留无可挽救再分别[01:00.15]为何只是失望填密我的空虚[01:06.82]这晚夜没有吻别[01:12.23]仍在说永久想不到是借口[01:18.40]从未意会要分手[01:27.42]但我的心每分每刻仍然被她占有[01:34.25]她似这月儿仍然是不开口[01:39.12]提琴独奏独奏着明月半倚深秋[01:45.52]我的牵挂我的渴望  直至以后[01:51.70][02:21.15]仍然倚在失眠夜望天边星宿[02:27.06]仍然听见小提琴如泣似诉再挑逗[02:32.97]为何只剩一弯月留在我的天空[02:39.59]这晚以后音讯隔绝[02:45.02]人如天上的明月是不可拥有[02:51.08]情如曲过只遗留无可挽救再分别[02:56.92]为何只是失望填密我的空虚[03:03.63]这晚夜没有吻别[03:08.75]仍在说永久想不到是借口[03:15.23]从未意会要分手[03:23.95]但我的心每分每刻仍然被她占有[03:30.60]她似这月儿仍然是不开口[03:35.79]提琴独奏独奏着明月半倚深秋[03:42.26]我的牵挂我的渴望  直至以后[03:47.86]仍在说永久想不到是借口[03:54.09]从未意会要分手[04:02.76]但我的心每分每刻仍然被她占有[04:09.88]她似这月儿仍然是不开口[04:14.85]提琴独奏独奏着明月半倚深秋[04:21.25]我的牵挂我的渴望  直至以后[04:29.00][00:00.001]>>>>>>>>>>>>>![00:00.009][99:00.000]

分解不用正则表达式,而用for循环折腾你就out了.block遍历以及forin方式都是设计模式中的迭代器模式,效率要比for循环高哦.

YXRegex.h + YXRegex.m

////  YXRegex.h//  Regex////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
typedef void (^textCheckingResult)(NSTextCheckingResult *match, NSRange matchRange);@interface YXRegex : NSObject#pragma mark - 可读写属性@property (nonatomic, strong) NSString *regexString;@property (nonatomic, strong) NSString *sourceString;#pragma mark - 只读属性@property (nonatomic, readonly) NSUInteger numberOfMatches;#pragma mark - 类方法+ (void)string:(NSString *)string pattern:(NSString *)pattern each:(textCheckingResult)block;+ (NSString *)string:(NSString *)string pattern:(NSString *)pattern replaceTemplate:(NSString *)string;#pragma mark - 实例方法- (instancetype)initWithSourceString:(NSString *)sourceString regexString:(NSString *)regexString;- (void)startAnalyse;- (void)each:(textCheckingResult)block;- (NSString *)replaceWithTemplateString:(NSString *)string;@end
////  YXRegex.m//  Regex////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "YXRegex.h"@interface YXRegex ()@property (nonatomic, strong) NSArray              *resultArray;@property (nonatomic, strong) NSRegularExpression  *regex;@end@implementation YXRegex- (instancetype)init{    return [self initWithSourceString:nil regexString:nil];}- (instancetype)initWithSourceString:(NSString *)sourceString                         regexString:(NSString *)regexString{    self = [super init];    if (self)    {        _sourceString = sourceString;        _regexString  = regexString;    }    return self;}- (void)startAnalyse{    if ([_sourceString length] && [_regexString length])    {        // 正则表达式        _regex = \        [NSRegularExpression regularExpressionWithPattern:_regexString                                                  options:NSRegularExpressionCaseInsensitive                                                    error:nil];                // 执行相关匹配操作        NSRange range = NSMakeRange(0, [_sourceString length]);        _resultArray = [_regex matchesInString:_sourceString                                       options:0                                         range:range];                // 获取到个数        _numberOfMatches = [_resultArray count];    }    else    {        NSLog(@"亲,请设置需要分析的字符串以及正则表达式");    }}- (void)each:(textCheckingResult)block{    if (_resultArray)    {        for (NSTextCheckingResult *match in _resultArray)        {            block(match, [match range]);        }    }}- (NSString *)replaceWithTemplateString:(NSString *)string{    if (string)    {        return [_regex stringByReplacingMatchesInString:_sourceString                                                options:0                                                  range:NSMakeRange(0, [_sourceString length])                                           withTemplate:string];    }    else    {        return nil;    }}+ (void)string:(NSString *)string pattern:(NSString *)pattern each:(textCheckingResult)block{    if ([string length] && [pattern length])    {        // 正则表达式        NSRegularExpression *regex = \        [NSRegularExpression regularExpressionWithPattern:pattern                                                  options:NSRegularExpressionCaseInsensitive                                                    error:nil];                // 执行相关匹配操作        NSRange range = NSMakeRange(0, [string length]);        NSArray *matches = [regex matchesInString:string                                          options:0                                            range:range];                // 匹配好了        for (NSTextCheckingResult *match in matches)        {            block(match, [match range]);        }    }}+ (NSString *)string:(NSString *)string             pattern:(NSString *)pattern     replaceTemplate:(NSString *)templateString{    if ([string length] && [pattern length])    {        // 正则表达式        NSRegularExpression *regex = \        [NSRegularExpression regularExpressionWithPattern:pattern                                                  options:NSRegularExpressionCaseInsensitive                                                    error:nil];                return [regex stringByReplacingMatchesInString:string                                               options:0                                                 range:NSMakeRange(0, [string length])                                          withTemplate:templateString];    }    else    {        return nil;    }}@end

分解歌词的源码:

// 读取歌词    NSString *str = [NSString stringWithContentsOfFile:BUNDLE_PATH(@"李克勤 - 月半夜小夜曲.lrc")                                              encoding:NSUTF8StringEncoding                                                 error:nil];    // 将歌词根据换行符分割成数组    NSArray *strArray = [str componentsSeparatedByString:@"\n"];        // 分解歌词    [strArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {                // 初始化一个可变字符串        __block NSMutableString *tmpStr = [[NSMutableString alloc] initWithString:obj];        // 正则表达式匹配出[**:**.**]的位置        [YXRegex string:tmpStr                pattern:@"\\[..:..\\...\\]"                   each:^(NSTextCheckingResult *match, NSRange matchRange) {                                              // 获取时间轴                       NSString *time = [tmpStr substringWithRange:matchRange];                                              // 获取歌词文本                       [tmpStr replaceCharactersInRange:matchRange withString:@""];                       // 打印出信息                       NSLog(@"%@ --> %@", time, tmpStr);                   }];    }];

打印信息如下:

要善于利用NSRange来帮助你解决问题.

 

 

 

 

转载于:https://www.cnblogs.com/YouXianMing/p/3809362.html

你可能感兴趣的文章
超市收银系统之——3
查看>>
数组0元素后置算法
查看>>
web.xml文件详解
查看>>
删除排序数组中的重复数字
查看>>
Linux下MySQL安装配置
查看>>
SQL之排序检索(order by子句)
查看>>
Python_内置函数2_44
查看>>
kettle-SQL文件输出
查看>>
TeeChart 的应用
查看>>
sybase powerdesigner 16.5注册码
查看>>
错误:已经有针对IP 192.168.1.107:8000的侦听,原因是因为这个行为配置,去掉后服务Open成功...
查看>>
android的listview中getview()的问题
查看>>
switch语句
查看>>
ie6-ie8中不支持opacity透明度的解决方法
查看>>
视图事件穿透
查看>>
HDU 5428 分解质因数
查看>>
用Jekyll搭建的Github Pages个人博客实践2
查看>>
masonry
查看>>
ContentProvider初步-------------------笔记
查看>>
asp.net网站中退出系统后通过后退键重新进入系统的解决方法
查看>>