Метод не работает - PullRequest
       13

Метод не работает

0 голосов
/ 23 января 2020

Я пишу программу для исправления файла субтитров mov ie (.srt). Помещение кода в метод main работает нормально, но теперь, когда я создал метод для упрощения своего кода, метод, кажется, не функционирует, и вывод совпадает с вводом, ничего не делается для настройки субтитров по времени.

import java.util.Scanner;
import java.io.File;
import java.util.Formatter;
import java.io.FileNotFoundException;

public class SubtitleFixer
{
    public static void main(String[] args)
    {
        try{
            File subFile = new File("/sdcard/UCDownloads/video/hichkiSub.srt");
            Formatter fixedSubFile = new Formatter("/sdcard/UCDownloads/video/newhichkiSubFixed.srt");

            Scanner scanText = new Scanner(subFile);
            while(scanText.hasNext()){
                String textFound = scanText.nextLine();
                if (textFound.contains("-->")){

                String fromHour, fromMins, fromSecs, middleText, toHour, toMins, toSecs, endText;
                int adjustMins = 1, adjustSecs = 2;

                    fromHour = textFound.substring(0,2);
                    fromMins = textFound.substring(3,5);
                    fromSecs = textFound.substring(6,8);
                    middleText = textFound.substring(8,17);
                    toHour = textFound.substring(17,19);
                    toMins = textFound.substring(20,22);
                    toSecs = textFound.substring(23,25);
                    endText = textFound.substring(25);

                    fixSubTime(fromSecs,adjustSecs,fromMins);
                    fixSubTime(fromMins,adjustMins,fromHour);
                    fixSubTime(toSecs,adjustSecs,toMins);
                    fixSubTime(toMins,adjustMins,toHour);

                    textFound = fromHour+":"+fromMins+":"+fromSecs+middleText+toHour+":"+toMins+":"+toSecs+endText;
                }
            fixedSubFile.format("%s\n",textFound);
            }
            scanText.close();
            fixedSubFile.close();
        }catch(FileNotFoundException error){System.out.println(error);}

    }

    private static void fixSubTime(String fromOrTo, int adjSecsOrMins, String minsOrHour){
        int fromOrToNum = Integer.parseInt(fromOrTo);
        int minsOrHourNum = Integer.parseInt(minsOrHour);
        fromOrToNum += adjSecsOrMins;
        if (fromOrToNum >= 60){
            fromOrToNum -= 60; minsOrHourNum += 1;
        }
        else if(fromOrToNum < 0) {
            fromOrToNum += 60; minsOrHourNum -= 1;
        }
        formatNum(fromOrToNum, fromOrTo);
        formatNum(minsOrHourNum,minsOrHour);
    }

    private static void formatNum(int num, String text){
        if (num <= 9){
            text = "0"+num;
        }
        else {
            text = ""+num;
        }
    }
}

Выход (аналогично входу):

1 00: 01: 15 , 784 -> 00: 01: 17 , 994 Мэм, сэр увидит вас сейчас.

2 00: 01: 23 , 416 -> 00: 01: 24 , 376 Спасибо.

3 00: 01: 43 687 -> 00: 01: 45 530 Г-жа Наина Матур. Пожалуйста, садитесь.

4 00: 01: 47,565 -> 00: 01: 48,942 Двойной бакалавр в сфере образования.

5 00: 01: 49,317 -> 00: 01: 51,277 И магистры в науке. Впечатляет. ...

Ожидаемый результат:

1 00: 02: 17 , 784 -> 00: 02: 19 , 994 Мэм, сэр увидит вас сейчас.

2 00: 02: 25 , 416 -> 00: 02: 26 , 376 Спасибо.

3 00: 02: 45,687 -> 00: 02: 47,730 Г-жа Наина Матур. Пожалуйста, сидите.

4 00: 02: 49,565 -> 00: 02: 50,942 Двойной бакалавр в сфере образования.

5 00: 02: 51,317 -> 00: 02: 53,277 И магистры в науке. Впечатляет.

1 Ответ

0 голосов
/ 23 января 2020

Ваш метод форматирования создает новый, управляемый объект String, а затем выбрасывает его. Таким образом, вы получите новый результат за пределами указанной c области одного вызова метода.

Вам необходимо вернуть результат и принять его в вызывающем методе.

private static String formatNum(int num, String text){
    if (num <= 9){
        return "0"+num;
    }
    else {
        return Integer.toString(num);
    }
}

Вызов должно быть как:

fromOrTo = formatNum(fromOrToNum, fromOrTo);

PS: есть String.format() для того, что пытается сделать ваш метод форматирования.

...