方法不起作用
Posted
技术标签:
【中文标题】方法不起作用【英文标题】:Method not functioning 【发布时间】:2020-01-23 05:39:36 【问题描述】:我正在编写一个程序来修复电影字幕文件(.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,730 奈娜·马图尔女士。请坐。
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 和理学硕士。令人印象深刻。
【问题讨论】:
private static void formatNum(int num, String text)
- 这不起作用。 Java 是按值传递的。尝试更改此方法以返回新的String
对象
是的,没错,我不知道 Java 字符串是如何通过引用类型传递的,但现在我知道了
【参考方案1】:
您的格式化方法创建了一个新的、可操作的 String 对象,然后将其丢弃。因此,您将在特定的单一方法调用范围之外获得新的结果。
您需要返回结果并在您的调用方法中接受它。
private static String formatNum(int num, String text)
if (num <= 9)
return "0"+num;
else
return Integer.toString(num);
调用应该是这样的:
fromOrTo = formatNum(fromOrToNum, fromOrTo);
P.S.:String.format()
表示您的格式方法尝试执行的操作。
【讨论】:
是的,谢谢,我没有记住这一点。并感谢您的提示。但是,在调用方法 (fixSubTime) 中出现了相同的错误,我需要在其中操作两个变量并获取它们的结果。由于我不能同时返回两个值,我不得不重组我的代码。以上是关于方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章