如何从 SubRip .srt 文件中仅提取文本(剥离时间码)?
Posted
技术标签:
【中文标题】如何从 SubRip .srt 文件中仅提取文本(剥离时间码)?【英文标题】:How can I extract only the text (stripping out timecodes) from SubRip .srt files? 【发布时间】:2014-09-17 10:31:31 【问题描述】:我想仅使用字幕中的文本进行进一步处理。
所以,打开一个 srt 文件会加载这个
1
00:00:10,500 --> 00:00:13,000
Elephant's Dream
2
00:00:15,000 --> 00:00:18,000
At the left we can see...
然后,在剥离/提取之后,结果将是
Elephant's Dream
At the left we can see...
我想去掉所有编号和时间码,因此输出将仅包含与原始字幕完全相同顺序的纯文本,并将结果存储在变量中以供进一步处理。
public void open_file()
JFileChooser filechooser = new JFileChooser();
filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int i = filechooser.showOpenDialog(this);
if (i == filechooser.CANCEL_OPTION)
return;
File OpenFile = filechooser.getSelectedFile();
if (OpenFile == null || OpenFile.getName().equals(""))
JOptionPane.showMessageDialog(this, "choose file", "Error", JOptionPane.ERROR_MESSAGE);
return;
try
BufferedReader bufferedreader = new BufferedReader(new FileReader(BukaFile));
StringBuffer stringbuffer = new StringBuffer();
String Row;
while ((Row = bufferedreader.readLine()) != null) stringbuffer.append(Row+"\n");
textArea.setText(stringbuffer.toString());
String SubText = textArea.getText();
catch (FileNotFoundException ex)
JOptionPane.showMessageDialog(null, "File not found" + ex);
catch (IOException ex)
JOptionPane.showMessageDialog(null, "IO Error"+ ex);
我已经创建了一个方法(如上)来打开和加载现有的 srt 文件并将其放入一个字符串(上面命名为 SubText)变量中。
要提取这些文本,我只知道我必须使用编号、时间码和空格作为起点和终点,但我不知道如何编码以检测文本中的这些编号和时间码.
我应该如何在 java 中完成这个?顺便说一句,我正在使用 Netbeans。
【问题讨论】:
你可以跳过前两行然后读一行,跳过 3 行,读一行,跳过 3 行等等。 好吧,问题是,有些文本有时不止一行,所以我不能一遍又一遍地“跳过 3 行” 【参考方案1】:格式很简单,每个字幕都由一个空行分隔,因此您只需跳过前两行,然后阅读所有内容,直到出现空行。
所以用这样的东西替换你的while循环......
while (...)
String lineNumber = bufferedReader.readLine();
String time = bufferedReader.readLine();
String text;
while (!(text = bufferedReader.readLine()).equals(""))
stringBuffer.append(text).append("\n");
请务必添加您自己的文件结尾检查。
【讨论】:
我的while循环用于在文本区域中写下未触及的srt,使用while循环读取和附加文本直到文件末尾(作为条件)。当我试图实现你的while循环以便我的while循环写下剥离的srt时,textarea只填充了空白行。我必须更改我的 while 条件吗? 糟糕!逻辑错误,应该是!equals(“”)。我现在已经更正了。 非常感谢先生 :) 成功了!顺便说一句,由于我的 while 循环条件,我只需要一个缓冲阅读器跳过。而且,您知道如何删除 srt 文件中的 html 标签吗? (例如 或 ) 已经在这里回答***.com/questions/240546/… 我正在使用 Jsoup lib,并且我在字符串上使用了 parse 方法,但它什么也没做。我是否使用错误的方法来剥离 html 标签?以上是关于如何从 SubRip .srt 文件中仅提取文本(剥离时间码)?的主要内容,如果未能解决你的问题,请参考以下文章