lrc歌词的解析,例如下面这样str = "[02:31.00][02:24.00][01:36.00][01:27.00][00:09.00]Ay,Iyaiyai";要如何解析,才能得到每个时间点的歌词?

解决方案 »

  1.   

    "[02:31.00][02:24.00][01:36.00][01:27.00][00:09.00]Ay,Iyaiyai";根据http://wenku.baidu.com/view/a2c008d8ce2f0066f53322c7.html
    百度文档的定义,
    []内的表示的是歌词开始显示的时间,所以"[02:31.00][02:24.00][01:36.00][01:27.00][00:09.00]Ay,Iyaiyai";
    "xxx";
    "yyyy";
    "kkkk";你用做的就是把[]里的时间,全部存到一个数组里,然后根据时间前后排序,,
    time[0],time[1],time[xxxx].
    在生成这个数组的同时,记录每个时间断词
    words[0],words[1],words[xxx].查询的时候只要根据当前的时间去找time数组里第一个比它的大的时间点,然后它的前一个时间点对应的words就是要显示的歌词
      

  2.   

    可以考虑下正则,试试下面的程序,不过歌词的具体规则描述得还是不够清晰
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {
        public static void main(String[] args) {
            String str = "[02:31.00]A[02:24.00]B[01:36.00][01:27.00][00:09.00]Ay,Iyaiyai";
            Pattern p = Pattern.compile("(\\[\\d\\d:\\d\\d\\.\\d\\d\\])([^\\[\\]]*)");
            Matcher m = p.matcher(str);
            while (m.find()) {
                String time = m.group(1);
                String lyric = m.group(2);
                System.out.println(time + lyric);
            }
        }
    }
    输出:
    [02:31.00]A
    [02:24.00]B
    [01:36.00]
    [01:27.00]
    [00:09.00]Ay,Iyaiyai
      

  3.   


    正则应该是个好方法,但是可能我没描述清楚,这个是歌词文件的一行,这5个时间点对应同一句歌词:Ay,Iyaiyai
      

  4.   

    这样?^_^
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {
        public static void main(String[] args) {
            String str = "[02:31.00][02:24.00][01:36.00][01:27.00][00:09.00]Ay,Iyaiyai";
            Pattern p = Pattern.compile("((\\[\\d\\d:\\d\\d\\.\\d\\d\\])+)(.*)");
            Matcher m = p.matcher(str);
            while (m.find()) {
                String time = m.group(1);
                String lyric = m.group(3);
                System.out.println(time + ":" + lyric);
            }
        }
    }
      

  5.   


    还是不对呀,这样写,没有把时间点分开,输出是:
    [02:31.00][02:24.00][01:36.00][01:27.00][00:09.00]:Ay,Iyaiyai我想要这样的结果,能不能帮助实现一下,谢谢
    [02:31.00]:Ay,Iyaiyai
    [02:24.00]:Ay,Iyaiyai
    [01:36.00]:Ay,Iyaiyai
    [01:27.00]:Ay,Iyaiyai
    [00:09.00]:Ay,Iyaiyai
      

  6.   

    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {
        public static void main(String[] args) {
            String lyric = "";
            List<String> timeAndLyric = new ArrayList<String>();
            String str = "[02:31.00][02:24.00][01:36.00][01:27.00][00:09.00]Ay,Iyaiyai";
            
            Pattern p = Pattern.compile("((\\[\\d\\d:\\d\\d\\.\\d\\d\\])+)(.*)");
            Matcher m = p.matcher(str);
            while (m.find()) {
                lyric = m.group(3);
            }
            
            p = Pattern.compile("\\[\\d\\d:\\d\\d\\.\\d\\d\\]");
            m = p.matcher(str);
            while (m.find()) {
                String time = m.group();
                timeAndLyric.add(time + ":" + lyric);
            }
            
            for (String s : timeAndLyric) {
                System.out.println(s);
            }
        }
    }
    输出:
    [02:31.00]:Ay,Iyaiyai
    [02:24.00]:Ay,Iyaiyai
    [01:36.00]:Ay,Iyaiyai
    [01:27.00]:Ay,Iyaiyai
    [00:09.00]:Ay,Iyaiyai