package test;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.StringTokenizer;public class TestLrc {

ArrayList<DataLine> list = null;
ArrayList<String> message = null;
StringTokenizer token = null;

FileInputStream in = null;

BufferedReader buff = null;

static int count = 0;
TestLrc(){
list = new ArrayList<DataLine>();
message = new ArrayList<String>();

try {
in = new FileInputStream("F:/ligo.lrc");
buff = new BufferedReader(new InputStreamReader(in));
String temp = null;

while((temp=buff.readLine())!=null){

DataLine dataLine = new DataLine();

String dataStr = temp.substring(temp.indexOf('[')+1,temp.indexOf(']'));
if(dataStr.startsWith("ti")||dataStr.startsWith("ar")
||dataStr.startsWith("al")||dataStr.startsWith("by")){
message.add(temp);
}else{

long minute = Long.parseLong(dataStr.substring(0,2));
long second = Long.parseLong(dataStr.substring(3,5));
long nao = Long.parseLong(dataStr.substring(6));
dataLine.lrcTime = minute*60*1000+second*1000+nao*10;

dataLine.lrcText = temp.substring(temp.indexOf(']')+1);
list.add(dataLine);
}
}
} catch (IOException e) {

e.printStackTrace();
}

Date startTime = new Date();
long start = startTime.getTime();

while(true){
Date endTime = new Date();
if((endTime.getTime()-start)==list.get(count).lrcTime){
System.out.println(list.get(count).lrcText);
count++;
}
}

}
public static void main(String[] args) {

new TestLrc();

}

class DataLine{
public long lrcTime;
public String lrcText;
}
}

解决方案 »

  1.   

    刚才试了下,发现2点小问题:
    1.文件中有空行的时候会出错
    String dataStr = temp.substring(temp.indexOf('[')+1,temp.indexOf(']'));
    temp.indexOf(']')返回-12.建议可以用定时器打印歌词
      

  2.   

    貌似打印的时候还有bug,刚才又报错了,这个我就不去查了
      

  3.   

    不好意思,好久没来csdn了,谢谢你的建议!
      

  4.   


    是的,还要获取字符的编码。我获取的是UTF-8,GBK,BIG5。
      

  5.   

       while(true){
                Date endTime = new Date();
                if((endTime.getTime()-start)==list.get(count).lrcTime){
                    System.out.println(list.get(count).lrcText);
                    count++;
                }
            }
            
    这里死循环,不断创建Date对象,会引起内存泄漏的。
      

  6.   

    其实把那个while循环可以放在一个线程里,谢谢大家的关注