java歌词解析器_JAVA 正则解析歌词
//目录结构
//来看一下歌词内容
[00:00.00]领袖音乐分享平台 http://www.kugou.com
[00:02.31]Pretty boy-M2M 英俊男孩 JY93653制作
[00:25.26]I lie awake at night
[00:30.54]See things in black and white
[00:36.06]I ve only got you inside my mind
[00:41.40]You know you have made me blind
还有很多,这里就不贴出来了,占位置
//解析出歌词时间和内容
public static void parserLrc1() throws IOException
{
//通过类加载来到得本地根目录下面的01.lrc文件的inputStream
InputStream inStreams=Test.class.getClassLoader().getResourceAsStream("01.lrc");
//通过InputStreamReader和BufferedReader来配合
//这里使用BufferedReader提供了很的方便,因为BufferedReader是一行一行的读的。
InputStreamReader inReader=new InputStreamReader(inStreams);
BufferedReader readered=new BufferedReader(inReader);
//构建正则表达式,这里的值是构建取得[00:00.00]的内容
Pattern pattern=Pattern.compile("\\[([^\\]]+)\\]");
//定义匹配值
String matcherValue=null;
while((matcherValue=readered.readLine())!=null)
{
//开始匹配
Matcher matcher=pattern.matcher(matcherValue);
//也许整个字符串匹配不到想要的值,所以向下寻找,看是否还有匹配的值
if(matcher.find())
{
//取出这个所匹配得到的值(时间)
String time=matcher.group();
//取出歌词内容,重第10个开始
String lrc=matcherValue.substring(10);
//输出内容看一下
System.out.println(time+"----"+lrc);
/**
* 注意,但这样也许不是我们要的效果
* 我们肯定想,拿到这个时间的豪秒数
* 好在程序中加以控制整个歌词的显示
* 见parserLrc2()方法
*/
}
}
}
看下结果。。。。。
//下面我们来看一下,稍微复杂点的,解析歌词时间和内容,并且放到队列中
//解析歌词时间和内容,并且放到队列中
public static ArrayList parserLrc2() throws IOException
{
//根据队列先进先出的原理,放歌词再合适不过了
Queue queue_time=new LinkedList();
Queue queue_content=new LinkedList();
//再弄个ArrayList来保存队列,方便传输
ArrayList queue_timeandlrc_Content=new ArrayList();
InputStream inStreams=Test.class.getClassLoader().getResourceAsStream("01.lrc");
InputStreamReader inReader=new InputStreamReader(inStreams);
BufferedReader readered=new BufferedReader(inReader);
//构建正则表达式,这里的值是构建取得[00:12.34]的内容
Pattern pattern=Pattern.compile("\\[([^\\]]+)\\]");
//定义匹配值
String matcherValue=null;
while((matcherValue=readered.readLine())!=null)
{
//开始匹配
Matcher matcher=pattern.matcher(matcherValue);
//也许整个字符串匹配不到想要的值,所以向下寻找,看是否还有匹配的值
if(matcher.find())
{
//取出这个所匹配得到的值(时间)
String time=matcher.group();
//增加内容如下\\\\\\\\\\\\\\\\\\\\
//得到总秒数,把时间拿出来通过正则在分解
long millisecond=getMillSecond(time.substring(1,time.length()-1));
//取出歌词内容,重第10个开始
String lrc=matcherValue.substring(10);
//放入队列
queue_time.offer(millisecond);
queue_content.offer(lrc);
//放入ArrayList
queue_timeandlrc_Content.add(queue_time);
queue_timeandlrc_Content.add(queue_content);
}
}
//返回
return queue_timeandlrc_Content;
}
//把得到的00:12.34再进行分解
public static long getMillSecond(String milli)
{
// 分 秒和毫秒
//把00:12.34拆分成new String[]{00,12.34}
String split_minute[]=milli.split(":");
//但我们只需要得到分钟,所以得把分钟给拿出来,也就是第0个元素
long minute=Integer.parseInt(split_minute[0]);
//现在要拿到秒数,也就是第1个元素再进行分解
String split_second[]=split_minute[1].split("\\.");
//这样我们就又拿到了秒
long second=Integer.parseInt(split_second[0]);
//拿到了毫秒
long millsecond=Integer.parseInt(split_second[1]);
//返回总毫秒数
return minute*60*1000+second*1000+millsecond;
}
//执行,拿出Queue里面的结果
public static void main(String[] args) throws Exception
{
ArrayList lrcandtime_Content=parserLrc2();
Queue time=lrcandtime_Content.get(0);
Queue lrc=lrcandtime_Content.get(1);
System.out.println(time.poll()+""+lrc.poll());
Iterator lrc_time=time.iterator();
Iterator lrc_content=lrc.iterator();
while(lrc_time.hasNext() && lrc_content.hasNext())
{
System.out.println(lrc_time.next()+":"+lrc_content.next());
}
}
//结果
java歌词解析器_JAVA 正则解析歌词相关推荐
- java xml解析器_Java XML解析器
java xml解析器 Java XML parser is used to work with xml data. XML is widely used technology to transpor ...
- java sax解析器_Java SAX解析器示例
java sax解析器 SAX Parser in java provides API to parse XML documents. SAX parser is different from DOM ...
- 解析器 java_Java高性能解析器实现思路及方法学习
当你必须自己实现一个解析器时,你对它的期望会有很多,包括性能良好.灵活.特性丰富.方便使用,以及便于维护等等.说到底,这也是你自己的代码.在本文中,我将为你介绍在Java中实现高性能解析器的一种方式, ...
- python的网页解析器_网页解析器(BeautifulSoup)-- Python
分享一下关于 Python的网页解析器(BeautifulSoup) BeautifulSoup解析器 为了实现解析器,可以选择使用正则表达式.html.parser.BeautifulSoup.lx ...
- WPF ---- xmal 解析器没有办法解析类的TypeConverter
xmal 解析器没有办法解析类的TypeConverter.代码如下 页面代码: <Window x:Class="WpfApplication_xmln.Windows.Conver ...
- jsp springmvc 视图解析器_Java面试题整理——SpringMVC
SpringMVC 1.什么是SpringMVC Spring MVC是一个MVC的开源框架,Spring MVC = Struts2+spring,Spring MVC就相当于是Struts2加上S ...
- java 解析括号_Java如何解析括号中的负数?
在金融应用中,负数通常用括号表示.在这篇文章中,我们将学习如何解析或转换括号中的负数以产生表示的数字值.要将文本/字符串解析为数字,我们可以使用java.text.DecimalFormat该类. 在 ...
- python解析器_Python Python解析器
欢迎观临Three太宝小屋- 什么是解析器? 解析器(parser)是指一个程序,通常是编译器的部分,接收输入的顺序源程序指令.交互式联机命令.标记或者一些其它定义的接口. 由于整个Python语言从 ...
- python的网页解析器_Python网页解析器使用实例详解
python 网页解析器 1.常见的python网页解析工具有:re正则匹配.python自带的html.parser模块.第三方库BeautifulSoup(重点学习)以及lxm库. 2.常见网页解 ...
最新文章
- 微信无法连接服务器501,微信成语猜猜看第501关BUG出现全是英文怎么过解决方法...
- Spring BeanDefinitionRegistryPostProcessor BeanPostProcessor作用
- 【 FPGA 】Vivado中常用的5个Tcl命令
- 敏捷开发的45个好习惯
- 斐波那契 (Standard IO)
- W3C专业术语翻译对照表
- 年轻的工程师如何月入伍万XD
- ThreadLocal与Synchronized的用法
- HikariDataSource 监控_Prometheus监控告警浅析
- laravel nginx配置_nginx高可用
- 在那里可以下载jar包?
- 汪磊Node基础、Node入门、黑马Node
- HTML入门笔记8-上脚注和下脚注标签
- windows下安装ppocr服务 paddlehub方式
- OrientDB初识-学习文档
- 史上最完整的人工智能书单大全
- Codeforces 912 D. Fishes (贪心、bfs)
- kafka 版本迭代递进
- python计算存款复利计算器_GitHub - dxcv/Options-Calculator: 期权价格计算器——金融工程第二次展示...
- 2022-2028全球与中国电磁建模软件市场现状及未来发展趋势