//
// LrcManager.h
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h>
#import "LrcItem.h" #define FilePath @"/Users/zhangxueming/Desktop/ios1509/Day16_类的复合设计/OC3_歌词解析/传奇.txt" @interface LrcManager : NSObject - (id)initWithFile:(NSString *)path; + (NSString *)userInterface:(float)aTime; @end
//
// LrcManager.m
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "LrcManager.h" //匿名类别(类扩展)
//能扩展方法与实例变量,实现了实例变量与方法的私有化
@interface LrcManager ()
{
NSString *_title; // 歌曲名
NSString *_author;// 歌词作者
NSMutableArray *_lrcList;//存lrcItem
} //解析歌词文件
- (BOOL)parseLrcFile:(NSString *)path;
//解析歌词标题
- (void)parseLrcTitle:(NSString *)lrcString;
//解析歌词演唱者
- (void)parseLrcAuthor:(NSString *)lrcString;
//解析歌词词条
- (void)parseLrcItem:(NSString *)lrcString;
//将时间字符串转换成浮点时间
- (float)timeByTimeString:(NSString *)aString; @end @implementation LrcManager - (id)initWithFile:(NSString *)path
{
self = [super init];
if (self) {
_lrcList = [NSMutableArray array];
[self parseLrcFile:path];
}
return self;
} - (BOOL)parseLrcFile:(NSString *)path
{
//读取歌词文件
NSString *fileContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
if (!fileContent) {
return NO;
}
//分割歌词字符串
NSArray *lrcArray = [fileContent componentsSeparatedByString:@"\n"]; for (NSString *lrcString in lrcArray) {
if ([lrcString isEqualToString:@""]) {
continue;
}
else if ([lrcString hasPrefix:@"[ti:"]) {
[self parseLrcTitle:lrcString];
}
else if ([lrcString hasPrefix:@"[ar:"])
{
[self parseLrcAuthor:lrcString];
}
else
{
[self parseLrcItem:lrcString];
}
}
//对可变数组排序
[_lrcList sortUsingSelector:@selector(isSortByTime:)];
return YES;
} - (void)parseLrcTitle:(NSString *)lrcString
{
_title = [lrcString substringWithRange:NSMakeRange(, [lrcString length]-)];
} - (void)parseLrcAuthor:(NSString *)lrcString
{
_author = [lrcString substringWithRange:NSMakeRange(, [lrcString length]-)];
}
//02:39.90
- (float)timeByTimeString:(NSString *)aString
{
NSArray *timeArray = [aString componentsSeparatedByString:@":"];
return [[timeArray objectAtIndex:] intValue]*+[[timeArray objectAtIndex:] floatValue];
} - (void)parseLrcItem:(NSString *)lrcString
{
NSArray *itemArray = [lrcString componentsSeparatedByString:@"]"];
NSInteger len = [itemArray count];
for (NSInteger i=; i<len-; i++)
{
LrcItem *item = [[LrcItem alloc] init];
NSString *timeString = [[itemArray objectAtIndex:i] substringFromIndex:];
[item setTime:[self timeByTimeString:timeString]];
[item setLrc:[itemArray lastObject]];
[_lrcList addObject:item];
}
}
//3.5 5.5 8.5 10.5 12.0
+ (NSString *)userInterface:(float)aTime
{
LrcManager *manager = [[LrcManager alloc] initWithFile:FilePath];
for (LrcItem *item in manager->_lrcList) {
[item printLrcItem];
}
NSInteger len = [manager->_lrcList count];
NSInteger i;
for (i=; i<len; i++) {
LrcItem *item = [manager->_lrcList objectAtIndex:i];
if (aTime < [item time]) {
return [[manager->_lrcList objectAtIndex:i-] lrc];
}
}
if (i==len) {
return [[manager->_lrcList objectAtIndex:i-] lrc];
}
return nil;
}
@end
//
// LrcItem.h
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h> @interface LrcItem : NSObject
{
float _time;
NSString *_lrc;
} - (float)time;
- (NSString *)lrc; - (void)setTime:(float)aTime;
- (void)setLrc:(NSString *)aLrc; - (BOOL)isSortByTime:(LrcItem *)aItem; - (void)printLrcItem; @end
//
// LrcItem.m
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "LrcItem.h" @implementation LrcItem - (float)time
{
return _time;
} - (NSString *)lrc
{
return _lrc;
} - (void)setTime:(float)aTime
{
_time = aTime;
} - (void)setLrc:(NSString *)aLrc
{
_lrc = aLrc;
} - (BOOL)isSortByTime:(LrcItem *)aItem
{
if ([self time] > [aItem time]) {
return YES;
}
return NO;
} - (void)printLrcItem
{
NSLog(@"time = %.2f lrc = %@", [self time], [self lrc]);
} @end
//
// main.m
// OC3_歌词解析
//
// Created by zhangxueming on 15/6/15.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h>
#import "LrcManager.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
float time;
scanf("%f",&time);
NSLog(@"%@", [LrcManager userInterface:time]);
}
return ;
}

OC3_歌词解析的更多相关文章

  1. android 歌词解析

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  2. ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存

    声明:(部分图片来自网络,如果侵犯了您的权益请联系我,会尽快删除!) 又是音乐播放器,不过这次和上次不一样了,准确说这次更像播放器了,初学者不建议看这个,可以先看前面一个音乐播放器(1),当然 我没加 ...

  3. iOS 音乐播放器之锁屏效果+歌词解析

    概述 功能描述:锁屏歌曲信息.控制台远程控制音乐播放:暂停/播放.上一首/下一首.快进/快退.列表菜单弹框和拖拽控制台的进度条调节进度(结合了QQ音乐和网易云音乐在锁屏状态下的效果).歌词解析并随音乐 ...

  4. iOS电商常见动画与布局、微信悬浮窗、音乐播放器、歌词解析、拖动视图等源码

    iOS精选源码 MXScroll 介绍 混合使用UIScrollView ios 电商demo(实现各种常见动画效果和页面布局) 一行代码集成微信悬浮窗 可拖动,大小的视图,可放置在屏幕边缘. 在使用 ...

  5. C语言之歌词解析

    0x00 脚下的路 不知道为啥要写这个小标题,可能是年轻的心想体验一下苍老的感觉,抑或是少年的一阵迷茫.混沌的四年,终究还是入了这一行.从初时的不知,到现在的刚开始,中间的间隔竟是四年之久,想起了陈奕 ...

  6. 网易云歌词解析(配合audio标签实现本地歌曲播放,歌词同步)

    先看下效果 github上做的一个音乐播放器: https://github.com/SorrowX/electron-music 中文歌曲 英文歌曲(如果有翻译的中文给回返回出去) 韩文歌曲 来看下 ...

  7. Objective-C歌词解析

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { FILE* fp1;//定义文件指针 ...

  8. 歌词解析&class

    class song_song: def __init__(self,lrc_file): # 定义两个字典一个列表备用 self.song_file = lrc_file self.song_lrc ...

  9. python 将歌词解析封装成类,要求:提供一个方法(根据时间返回歌词) - 提示:封装两个类:歌词类、歌词管理类

    自己写的 有更好方案的大佬可以讨论一下 import bisectclass Lrc(): def __init__(self, sec, lrc): self.sec = sec self.lrc ...

随机推荐

  1. Codeforces Gym 100286G Giant Screen 水题

    Problem G.Giant ScreenTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/con ...

  2. C#实现对Word文件读写[转]

    手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Pr ...

  3. Missing access checks in put_user/get_user kernel API (CVE-2013-6282)

    /* 本文章由 莫灰灰 编写,转载请注明出处. 作者:莫灰灰    邮箱: minzhenfei@163.com */ 1.漏洞成因 Linux kernel对ARM上的get_user/put_us ...

  4. Struts2之异常处理

    一.学习案例:通过在input.jsp页面输入登录账号和password測试异常处理机制. 二.案例分析:struts2提供了局部异常处理机制和全局异常处理机制.局部优先于全局异常处理,当异常找不到局 ...

  5. 关于port的关闭——Linux

    本文出自:http://blog.csdn.net/svitter 引文出自:http://bbs.chinaunix.net/thread-775649-1-1.html 1.关闭服务 servic ...

  6. ZOJ1109_Language of FatMouse(STL/map)

    解题报告 题意: 略. 思路: map应用. #include <algorithm> #include <iostream> #include <cstring> ...

  7. [原创]如何写好SqlHelper 之终章

    精简的美丽...... 标题有点大.但是,我觉得99%的接近了. 好了,下面我们来说说一个SqlHelper为了适应各种不同的业务需要,它应该具备哪些基本要素. 第一点.可控的事务. 事务是数据库操作 ...

  8. 第1章 游戏之乐——NIM(2)“拈”游戏分析

    NIM(2)“拈”游戏分析 1. 问题 有N块石头和两个玩家A和B,玩家A先将石头分成若干堆,然后按照BABA……的顺序不断轮流取石头,能将剩下的石头一次取光的玩家获胜.每次取石头时,每个玩家只能从若 ...

  9. MySQL查询优化--细节理论

    select的 high_priority还是比较有用,在实践中,平均5~6秒提高到3秒 ======================================================= ...

  10. 网口扫盲三:以太网芯片MAC和PHY的关系

    转载:http://www.cnblogs.com/jason-lu/articles/3195473.html   问:如何实现单片以太网微控制器? 答:诀窍是将微控制器.以太网媒体接入控制器(MA ...