Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 626|回复: 0

电影字幕时间调整程序 java实例

[复制链接]

该用户从未签到

发表于 2011-9-18 13:54:05 | 显示全部楼层 |阅读模式
从初中开始就喜欢成龙的电影,最近下了个《尖峰时刻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;
}
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 23:50 , Processed in 0.302512 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表