我当前项目的一部分是将 mm:ss 转换为秒...但用户可以选择输入 x:xx 或 xx:xx。
例如,如果有人想在程序中输入一分三十秒,他们可以选择将其写为“01:30”或“1:30”。两者的输出都是 90 秒。
这是我当前的代码。
System.out.print("Time (mm:ss): ")
String time = scan.nextLine();
int min = Integer.parseInt(time.substring(0, time.indexOf(':'))) * 60;
int sec = Integer.parseInt(time.substring(3, time.length()));
int duration = (min + sec);
System.out.println("Seconds: " + duration)
每当我输入 xx:xx 时它都会工作,但当我输入 x:xx 时它会失败。
我不知道如何只读取 ":" 之后的字符。如果我从“:”开始子字符串(我现在在 3 处),它不能转换为 int,因为它读取的是“:”。
我在谷歌和我的教科书上找遍了,但没有找到任何东西。我假设我只是使用了错误的技术。代码需要保持在基本初学者 String 方法的参数范围内。谢谢!
答案 0 :(得分:1)
这个答案可能不符合要求的基本初学者 String
方法的参数。我认为这对没有相同限制的其他读者会很有用。
Duration
类是用于 1 分 30 秒等时间量的类。不幸的是,Duration
类只能解析 ISO 8601 格式的字符串(下面的链接),但是使用正则表达式进行字符串转换并不难。幸运的是,在 ISO 8601 格式中,前导零无关紧要。 Duration
类是 java.time(现代 Java 日期和时间 API)的一部分。
持续时间的 ISO 8601 格式类似于 PT01M30S
。将其视为 01 分 30 秒的时间段。如果格式一开始感觉不寻常,那就很简单了。所以让我们转换它。以下方法接受您用户的格式,转换并返回 Duration
。
public static Duration parseDuration(String durStr) {
String isoString = durStr.replaceFirst("^(\\d{1,2}):(\\d{2})$", "PT$1M$2S");
return Duration.parse(isoString);
}
Duration
有一个 toSeconds
转换为秒的方法。所以让我们尝试一下:
System.out.println(parseDuration("01:30").toSeconds());
System.out.println(parseDuration("1:30").toSeconds());
输出是预期的:
<块引用>90
90
不过,请考虑是否需要转换为秒。保持 Duration
对象的原样可能会使您的代码更易于解释。
答案 1 :(得分:0)
int sec = Integer.parseInt(time.substring(time.indexOf(':') + 1), time.length()));
谢谢各位!
答案 2 :(得分:0)
这里我简化了你的代码。
String time = "1:30";
String[] timeUnit = time.split(":");
int totalSeconds = 60 * Integer.parseInt(timeUnit[0]) + Integer.parseInt(timeUnit[1]);
System.out.println("Seconds "+totalSeconds);