Lrc歌词的一般歌词格式如下

        [ti:歌曲名][ar:歌手名][al:专辑名][by:编辑者][offset:时间补偿值][00:00.00]或[00:00.000]

[ti:歌曲名]-title题目,标题,曲目
[ar:歌手名]-artist艺术家、演唱者
[al:专辑名]-album唱片集、专辑
[by:编辑者]-一般指lrc歌词的制作人
[offset:时间补偿值]-其单位是毫秒,正值表示延迟,负值表示提前。用于整体调整歌词显示慢(快)于音乐播放。

解析效果图

输出格式:

SimpleDateFormat format = new SimpleDateFormat("mm:ss:SSS");System.out.println(format.format(lyrBean.getLongtime()) +"----" + lyrBean.getText());

话就不多说,直接上代码

PraseLrc.java

/*** 解析Lrc歌词**/public class PraseLrc {public static void main(String[] args) {//获取歌词文本String lyr = getLrc();//[ti:歌曲名]-title题目,标题,曲目String tiText = getCenterText("[ti", "]", lyr);//[ar:歌手名]-artist艺术家、演唱者String arText = getCenterText("[ar", "]", lyr);//[al:专辑名]-album唱片集、专辑String alText = getCenterText("[al", "]", lyr);//[by:编辑者](一般指lrc歌词的制作人)String byText = getCenterText("[by", "]", lyr);//[offset:时间补偿值]其单位是毫秒,正值表示延迟,负值表示提前。用于整体调整歌词显示慢(快)于音乐播放。String offsetText = getCenterText("[offset", "]", lyr);System.out.println("歌曲名:" + tiText);System.out.println("歌手名:" + arText);System.out.println("专辑名:" + alText);System.out.println("编辑者:" + byText);System.out.println("歌曲偏移:" + offsetText);//解析歌词List<LrcBean> lrcBeans = new ArrayList<>();//存放歌词String[] split = lyr.split("\\n");//分割if (split.length == 1) split = lyr.split("\\\\n");for (String s : split) {List<LrcBean> list = parseLine(s);if (list != null && !list.isEmpty()) {lrcBeans.addAll(list);}}//按照时间排序Collections.sort(lrcBeans, (lyrBean, t1) -> (int)(lyrBean.getLongtime() - t1.getLongtime()));//输出看看歌词效果System.out.println("解析出的歌词如下:");for (LrcBean lyrBean : lrcBeans) {SimpleDateFormat format = new SimpleDateFormat("mm:ss:SSS");System.out.println(format.format(lyrBean.getLongtime()) + "----"+ lyrBean.getText());}}//解析每一行的歌词private static List<LrcBean> parseLine(String s) {if (s.isEmpty()) {return null;}// 去除空格s = s.trim();// 正则表达式,判断s中是否有[00:00.60]或[00:00.600]格式的片段Matcher lineMatcher = Pattern.compile("((\\[\\d{2}:\\d{2}\\.\\d{2,3}\\])+)(.+)").matcher(s);// 如果没有,返回nullif (!lineMatcher.matches()) {return null;}// 得到时间标签String times = lineMatcher.group(1);// 得到歌词文本内容String text = lineMatcher.group(3);List<LrcBean> entryList = new ArrayList<>();Matcher timeMatcher = Pattern.compile("\\[(\\d\\d):(\\d\\d)\\.(\\d{2,3})\\]").matcher(times);while (timeMatcher.find()) {long min = Long.parseLong(timeMatcher.group(1));// 分long sec = Long.parseLong(timeMatcher.group(2));// 秒long mil = Long.parseLong(timeMatcher.group(3));// 毫秒// 转换为long型时间int scale_mil=mil>100?1:10;//如果毫秒是3位数则乘以1,反正则乘以10// 转换为long型时间long time =min * 60000 +sec * 1000 +mil * scale_mil;// 最终解析得到一个listentryList.add(new LrcBean(time, times, text));}return entryList;}//获取中间文本,主要是获取歌词中的歌名专辑名这些private static String getCenterText(String start, String end, String s) {if (start.isEmpty() || end.isEmpty() || s.isEmpty()) {return "";}int i = s.indexOf(start);int i1 = s.indexOf(end, i);if (i == -1 || i1 == -1) return "";String s1 = s.substring(i + start.length(), i1);return s1;}//歌词文本public static String getLrc() {return "[00:00.000] 作曲 : Skot Suyama 陶山\\n[00:01.000] 作词 : 陈忻玥\\n[00:14.325]不愿再低头懦弱\\n[00:18.810]泪水不停滑落\\n[00:20.958]不会再依循遵守\\n[00:25.829]心思不停躇踌\\n[00:27.743]\\n[00:28.149]我有我的心\\n[00:29.457]我有我的命\\n[00:31.123]要自己决定\\n[00:32.464]要对得起自己\\n[00:34.244]\\n[00:34.630]独自站在这路口\\n[00:39.529]Don’t know where to go\\n[00:41.159]\\n[00:41.442]But I ain’t gonna cry again.\\n[00:47.578]I’ll stand my ground, I’ll fight.\\n[00:53.552]\\n[00:56.202]挣开这世界的綑绑\\n[01:02.633]却看不清自己的模样\\n[01:08.124]Ignite the fire within me\\n[01:11.112]keeps burning till the day I’m underground\\n[01:15.891]冲破这世界的高墙\\n[01:21.451]Till I’m underground\\n[01:25.295]Imma get my crown\\n[01:28.345]Till I’m underground\\n[01:32.010]I will get my crown\\n[01:35.198]\\n[01:36.543]独自站在这路口\\n[01:41.076]我知道该往哪走\\n[01:43.243]不需要任何理由\\n[01:47.830]来忠于我的美梦\\n[01:49.575]\\n[01:50.094]我有我的心\\n[01:51.534]我有我的命\\n[01:53.193]要自己决定\\n[01:54.767]要对得起自己\\n[01:56.528]\\n[01:56.942]独自站在这路口\\n[02:01.531]I know where to go And I ain’t gonna cry again.\\n[02:09.795]I’ll stand my ground. I’ll fight.\\n[02:15.862]\\n[02:18.360]挣开这世界的綑绑\\n[02:24.880]却看不清自己的模样\\n[02:30.032]Ignite the fire within me\\n[02:33.444]keeps burning till the day I’m underground\\n[02:38.559]冲破这世界的高墙\\n[02:43.657]Till I’m underground\\n[02:47.207]Imma get my crown\\n[02:50.461]Till I’m underground\\n[02:53.891]I will get my crown\\n[02:55.311]\\n[03:13.129]All I wanna do is follow my heart\\n[03:15.835]All I know is that I don’t give a ****\\n[03:19.264]All I wanna do is stand on my ground\\n[03:22.667]All I know is that I’ll never give up\\n[03:26.096]\\n[03:27.130]挣开这世界的綑绑\\n[03:32.963]却看不清自己的模样\\n[03:38.533]Ignite the fire within me\\n[03:42.132]keeps burning till the day I’m underground\\n[03:47.312]冲破这世界的高墙\\n[03:52.277]Till I’m underground\\n[03:56.084]Imma get my crown\\n[03:59.080]Till I’m underground\\n[04:02.527]I will get my crown\\n";}
}

LrcBean.java

public class LyrBean {long longtime;//long类型时间String time, text;//时间文本与歌词文本public long getLongtime() {return longtime;}public void setLongtime(long longtime) {this.longtime = longtime;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public String getText() {return text;}public void setText(String text) {this.text = text;}public LrcBean(long longtime, String time, String text) {this.longtime = longtime;this.time = time;this.text = text;}
}

Java解析Lrc歌词相关推荐

  1. 我的Android进阶之旅------Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  2. Android自定义View来实现解析lrc歌词同步滚动、上下拖动、缩放歌词等功能

    http://blog.csdn.net/ouyang_peng/article/details/50813419 前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌 ...

  3. Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

    原文地址https://blog.csdn.net/qq446282412/article/details/50813419 前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 ...

  4. 我的Android进阶之旅------gt;Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  5. Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能[转]

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  6. 如何用js完美的解析lrc歌词

    要想解析lrc,就得先知道lrc是什么,lrc是英文lyric(歌词)的缩写,基于纯文本的歌词专用格式,被用做歌词文件的扩展名.以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示,最早是由郭祥祥 ...

  7. 【我的Android进阶之旅】Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词、卡拉OK高亮的功能

    文章目录 前言 一.LRC歌词文件简介 1.什么是LRC歌词文件 2.LRC歌词文件的格式 LRC歌词文件的标签类型 1.标识标签 2.时间标签 二.解析LRC歌词 1.读取出歌词文件 2.解析得到的 ...

  8. Android中解析lrc歌词 同步歌曲

    </pre><pre name="code" class="java">//歌词解析类 public class LrcParser { ...

  9. iOS 歌词解析(lrc, 非谓词, 仿QQ音乐, 仿卡拉ok模式)

    前言 要解析 lrc 格式的歌词, 首先需要知道什么是 lrc 歌词, 还需要知道 lrc 歌词的规范. 在这里先放出一个百度百科的链接地址, 仅供大家参考: 百度百科: lrc 关于本文 本文的歌词 ...

  10. LRC歌词解析,实现Linux设备播放音乐显示歌词 LRC解析

    开始正文~~~ 1.关于LRC lrc是英文lyric(歌词)的缩写,被用做歌词文件的扩展名.以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示.LRC 歌词是一种包含着"*:*&qu ...

最新文章

  1. Ascii码 、16进制与 char
  2. 注意Hibernate4在开发当中的一些改变
  3. super.getClass()方法调用返回结果的原因
  4. Modbus协议栈应用实例之六:Modbus ASCII从站应用
  5. SpringBoot微服务项目构建war包 部署排除指定jar
  6. css 百分比 怎么固定正方形_web前端入门到实战:一次搞懂CSS字体单位:px、em、rem和%
  7. vue 导入excel解析_VUE中导入excel文件
  8. 计算机显示技术发展,显示技术
  9. [人体参考]_人体各部分布线图人体解剖参考资料下载!
  10. pfc颗粒linux安装包,离散元颗粒流软件(PFC3D/PFC2D)
  11. C++实现华氏温度转为摄氏温度
  12. 浅谈 | 日内动量交易策略
  13. 股票做空机构-浑水公司
  14. 乐观的态度使工作充满激情
  15. Java知识结构图谱
  16. 一只100万年也不死的猫
  17. 移动APP测试,adb工具,常用的命令(1)
  18. C# winform 一个简单的类的方法的封装与调用
  19. HNU计算机系统lab3
  20. SQLSERVER时间转换成字符串,去掉中划线

热门文章

  1. 关于冯.诺依曼结构与哈佛结构的一些疑问
  2. JQuery EasyUI 教程
  3. excel文件下载下来损坏 js_js文件操作之——导出Excel (js-xlsx)
  4. 你这一生其实只有9年
  5. 华为手机长按图片无法下载
  6. 基于单片机的模拟电磁曲炮设计
  7. 2018年上半年UI领域主要的13个设计趋势
  8. Nginx负载均衡配置
  9. 概率论笔记3.1二维随机变量及其函数分布
  10. html语言开关控制灯泡,用js控制电灯开关