Как я могу извлечь только текст (удаляя тайм-коды) из файлов SubRip .srt?

Я хотел бы использовать текст только из субтитров для дальнейшей обработки.

Таким образом, открытие файла 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 и поместить его в переменную String (названную выше SubText).

Все, что я знаю, чтобы извлечь эти тексты, это то, что мне нужно использовать нумерацию, временные коды и пустое пространство для начальной и конечной точек, но я понятия не имею, как кодировать для обнаружения этих нумераций и временных кодов в тексте.

Как мне это сделать в java? Я использую Netbeans, кстати.


person MIMB    schedule 17.09.2014    source источник
comment
Возможно, вы могли бы пропустить первые две строки, затем прочитать одну строку, пропустить 3 строки, прочитать одну строку, пропустить 3 строки и т. д.   -  person assylias    schedule 17.09.2014
comment
Ну, проблема в том, что некоторый текст иногда состоит из более чем одной строки, поэтому я не могу просто пропустить 3 строки снова и снова   -  person MIMB    schedule 17.09.2014


Ответы (1)


Формат прост, каждый подзаголовок отделяется пустой строкой, поэтому все, что вам нужно сделать, это пропустить первые 2 строки, а затем прочитать все, пока не дойдете до пустой строки.

Поэтому замените цикл while на что-то вроде этого...

    while (...) {
        String lineNumber = bufferedReader.readLine();
        String time = bufferedReader.readLine();
        String text;
        while (!(text = bufferedReader.readLine()).equals(""))
            stringBuffer.append(text).append("\n");
    }

Обязательно добавьте свою собственную проверку конца файла.

person TedTrippin    schedule 17.09.2014
comment
мой цикл while используется для записи нетронутого srt в текстовом поле, а цикл while используется для чтения и добавления текстов до конца файла (как условие). когда я попытался реализовать ваш цикл while, чтобы мой цикл while записывал разделенный srt, текстовая область заполнялась только пустой строкой. мне нужно изменить мое состояние while? - person MIMB; 17.09.2014
comment
Ой! Неверная логика, должно было быть !equals(). Я сейчас исправил. - person TedTrippin; 17.09.2014
comment
большое спасибо, сэр :) это сработало! Кстати, из-за моего состояния цикла while мне нужен только один пропуск буферизованного считывателя. и у вас есть идеи, как я могу удалить теги html в файле srt? (например, ‹i› или ‹u›) - person MIMB; 17.09.2014
comment
уже ответил здесь stackoverflow.com/questions/240546 / - person TedTrippin; 17.09.2014
comment
я использую Jsoup lib и использовал метод синтаксического анализа строки, но он ничего не делает. я использую неправильный метод для удаления html-тегов? - person MIMB; 17.09.2014
comment
мой плохой, я использую неправильный метод. используя чистый метод, и все эти теги исчезли, но также и все \n (пустая строка). как я могу этого избежать? - person MIMB; 17.09.2014
comment
Сначала очистите строку, а затем добавьте возврат. - person TedTrippin; 18.09.2014
comment
забавно, как я работал над этим всю ночь безрезультатно, но простой совет от вас так легко просветил меня .. еще раз, СПАСИБО, Сэр :) - person MIMB; 18.09.2014