zoukankan      html  css  js  c++  java
  • android 歌词解析

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.Hashtable;
    
    /**
     * <b>歌词解析类</b>
     * 
     * @author 席有芳
     * @QQ QQ:951868171
     * @version 1.0
     * @email xi_yf_001@126.com
     */
    public class LrcDecode {
    
        private Hashtable<String, String> lrcTable = null;
    
        /**
         * 解析Lrc
         */
        public LrcDecode readLrc(InputStream is) {
            lrcTable = new Hashtable<String, String>();
            try {
                BufferedReader bis = new BufferedReader(new InputStreamReader(is, "gbk"));
                String str = null;
                while ((str = bis.readLine()) != null) {
                    decodeLine(str);
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                lrcTable = null;
            }
            return this;
        }
    
        /**
         * 单行解析
         */
        private LrcDecode decodeLine(String str) {
    
            if (str.startsWith("[ti:")) {// 歌曲名
                lrcTable.put("ti", str.substring(4, str.lastIndexOf("]")));
    
            } else if (str.startsWith("[ar:")) {// 艺术家
                lrcTable.put("ar", str.substring(4, str.lastIndexOf("]")));
    
            } else if (str.startsWith("[al:")) {// 专辑
                lrcTable.put("al", str.substring(4, str.lastIndexOf("]")));
    
            } else if (str.startsWith("[by:")) {// 作词
                lrcTable.put("by", str.substring(4, str.lastIndexOf("]")));
    
            } else if (str.startsWith("[la:")) {// 语言
                lrcTable.put("la", str.substring(4, str.lastIndexOf("]")));
    
            } else {
                // 歌词正文
                int startIndex = -1;
                while ((startIndex = str.indexOf("[", startIndex + 1)) != -1) {
                    int endIndex = str.indexOf("]", startIndex + 1);
                    // 添加时间戳格式
                    lrcTable.put(strToLongToTime(str.substring(startIndex + 1, endIndex)) + "",
                            str.substring(str.lastIndexOf("]") + 1, str.length()));
                }
            }
            return this;
        }
    
        /**
         * 获取解析成功的歌词
         */
        public Hashtable<String, String> getLrcTable() {
            return lrcTable;
        }
    
        /**
         * 保证时间格式一致 为m:ss
         * 
         * @param str
         *            时间字符
         * @return 判断用的时间符
         */
        private String strToLongToTime(String str) {
            // System.out.println(str);
            int m = Integer.parseInt(str.substring(0, str.indexOf(":")));
            int s = 0;
            int ms = 0;
    
            // 判断歌词时间是否有毫秒
            if (str.indexOf(".") != -1) {
                s = Integer.parseInt(str.substring(str.indexOf(":") + 1, str.indexOf(".")));
                ms = Integer.parseInt(str.substring(str.indexOf(".") + 1, str.length()));
            } else {
                s = Integer.parseInt(str.substring(str.indexOf(":") + 1, str.length()));
            }
            // System.out.println(timeMode(m * 60000 + s * 1000 + ms * 10));
            return timeMode(m * 60000 + s * 1000 + ms * 10);
        }
    
        /**
         * 返回时间
         * 
         * @param time
         *            毫秒时间
         */
        public static String timeMode(int time) {
            int tmp = (time / 1000) % 60;
            if (tmp < 10)
                return time / 60000 + ":" + "0" + tmp;
            else
                return time / 60000 + ":" + tmp;
        }
    
        public static void main(String[] str) {
            try {
                FileInputStream f = new FileInputStream("D:" + File.separator + "google" + File.separator + "一点点.lrc");
                LrcDecode lrcDecode = new LrcDecode();
                lrcDecode.readLrc(f);
                if (lrcDecode.getLrcTable() != null) {
                    // 转换时间并输出内容,3000为当前时间currentTime
                    System.out.println(lrcDecode.getLrcTable().get(LrcDecode.timeMode(3000)));
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    spring + velocity实现分页程序
    Velocity分页模板
    .Net之NVelocity的三种用法
    .Net下模板引擎NVelocity的封装类――VelocityHelper
    NVelocity系列:NVelocity的语法及指令
    Velocity用户手册
    NVelocity的增强功能
    NVelocity配置详解
    报Error creating bean with name 'dataSource' defined in class path resource 报错解决办法
    如何向老外索要代码【转】
  • 原文地址:https://www.cnblogs.com/yzjT-mac/p/5831150.html
Copyright © 2011-2022 走看看