|
从初中开始就喜欢成龙的电影,最近下了个《尖峰时刻2》,是英文原声的没错,可是没有字幕,我的英文水平还有限,尤其是那个黑卡特,讲话又快,根本听不清他说什么。下个字幕吧,还配不上画面,晚了近半分钟,搞得我这个郁闷呀!无意中用记事本打开了字幕文件,哇塞,原来是可以编辑的~~!!中文字幕大致内容如下:
1
00:00:39,200 --> 00:00:42,533
片名:《火拼时速2》
2
00:01:05,865 --> 00:01:07,526
“美国领事馆”
3
00:02:00,236 --> 00:02:01,132
唔该
4
00:02:19,172 --> 00:02:20,834
快叫警察去
5
00:02:26,797 --> 00:02:31,543
“但愿她们全是加洲女郎”
……
看到内容比较规律,于是产生了一个想法,干脆写段代码把时间统一调整一下不就好了嘛^_^,说做就做~~
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 字幕时间调整器
* @author 狂闪工作室.宁宁 2010-07-02
*
*/
public class TimeConverterTest {
public static void main (String args[]) throws Exception{
String str = getInput();
String ku[]=str.split("#");//获取字幕文件的每行内容
List< String[]> list = new ArrayList< String[]>();
for(int i=0;i< ku.length;i++){
if(i%4==1){//带有需转换时间的行
String time[] = ku.split(" --> ");//获取每句字幕的开始及结束时间
list.add(time);
}
}
List< String[]> newlist = getNewTime(list);//时间调整
//输出到新字幕文件
File f = new File("d:\\a.txt");
PrintWriter out = new PrintWriter(f);
int t = 0;
for(int i=0;i< ku.length;i++){
if(i%4==1){
for(int j=t;j<=t && j< newlist.size();j++){
String time[] = newlist.get(j);
out.println(time[0]+" --> "+time[1]);
t++;
break;
}
}else{
out.println(ku);
}
}
out.close();
}
/**
* 流读取文件
* @return 文本内容字符串
* @throws Exception
*/
static String getInput() throws Exception{
String str[]=new String[2336];//数组的长度为文本文件的总行数
String s="";
InputStream in = new FileInputStream("d:\\b.txt");
BufferedInputStream bin = new BufferedInputStream(in);
InputStreamReader isr = new InputStreamReader(bin);
BufferedReader br = new BufferedReader(isr);
for(int i=0;i< str.length;i++){
str = br.readLine();
s=s+str+"#";//用#号分隔每行内容,组拼为一个字符串
}
in.close();
return s;
}
/**
* 时间转换器
* @param list 准备转换的时间集合
* @return 已调整过的时间集合
*/
static List< String[]> getNewTime(List< String[]> oldlist){
List< String[]> newTime = new ArrayList< String[]>();
SimpleDateFormat d= new SimpleDateFormat("HH:mm:ss,SS");//格式化时间至毫秒
for(String[] oldTime : oldlist){
String[] n = new String[2];
for(int i=0;i< oldTime.length;i++){
String testtime=oldTime;
try {
long result=d.parse(testtime).getTime()-30000;//时间减30秒
SimpleDateFormat sdf= new SimpleDateFormat("HH:mm:ss,SS");
String newtime=sdf.format(new Date(result));
n = newtime;
} catch (ParseException e) {
e.printStackTrace();
}
}
newTime.add(n);
}
return newTime;
}
} |
|