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
百度文档的定义,
[]内的表示的是歌词开始显示的时间,所以"[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就是要显示的歌词
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
正则应该是个好方法,但是可能我没描述清楚,这个是歌词文件的一行,这5个时间点对应同一句歌词:Ay,Iyaiyai
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);
}
}
}
还是不对呀,这样写,没有把时间点分开,输出是:
[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
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