как прибавить время из файла в минуты и секунды?
у меня есть вот такой код : `
public static void main(String[] args) throws UnsupportedEncodingException, IOException {
String Zombie = "Королевский зомби";
String Slime = "Сточный слизень";
String Spider = "Матка";
String Cow = "Коровка из Коровёнки";
String Yeti = "Йети";
String Levik = "Левиафан";
String Fish = "Хранитель подводного мира";
String Ghast = "Небесный владыка";
String ZOMBIE_BOSS = Zombie;
String SLIME_BOSS = Slime;
String SPIDER_BOSS = Spider;
String COW_BOSS = Cow;
String YETI_BOSS = Yeti;
String LEVIK_BOSS = Levik;
String FISH_BOSS = Fish;
String GHAST_BOSS = Ghast;
{
String[] Bosses = new String[] {ZOMBIE_BOSS, SLIME_BOSS, SPIDER_BOSS, COW_BOSS, YETI_BOSS, LEVIK_BOSS, FISH_BOSS, GHAST_BOSS};
String lineFromFile;
String s = File.separator;
String path = s+ "Users" +s+ "Арслан" +s+ "eclipse-workspace" +s+ "BossCheck" +s+ "src" +s+ "Boss" +s+ "Logs.txt";
try (InputStreamReader inputStreamReader = new InputStreamReader
(new FileInputStream(path), "Windows-1251")) {
try (BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
while (bufferedReader.ready()) {
lineFromFile = bufferedReader.readLine();
int bossIndex = -1;
for (int i = 0; i < Bosses.length; i++) {
if (lineFromFile.contains(Bosses[i])) {
bossIndex = i;
break;
}
}
if (bossIndex != -1) {
String[] str2 = lineFromFile.split(Bosses[bossIndex] + " " + "был повержен за ");
if (str2.length > 1) {
str2 = str2[1].split(" ");
int time = Integer.parseInt(str2[0]);
String timeStamp = new SimpleDateFormat("HH" + ":" + "mm" + ":" + "ss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();{
}
}
}
}
}
} `
я хотел сделать так, чтобы он переводил 1 минуту и 50 секунд из текстового файла
их в 53 строку кода, то-есть часы в "HH", минуты в "mm", а секунды в "ss"
Ответы (1 шт):
Для начала давайте избавимся от нечитаемого ужаса. Для этого вспоминаем SOLID, хотя хватит и 1 принципа. Теперь разбиваем все на максимально короткие и простые методы с минимальным функционалом. Избавляемся от устаревших способов чтения файла, а также от бессмысленных переменных и прочего, получаем примерно следующее :
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.Duration;
import java.util.stream.Stream;
public class Main {
private final static String DURATION_PATTERN = "%d:%02d:%02d";
public static void main(String[] args) throws Exception {
String[] bosses = Stream.of("Королевский зомби", "Сточный слизень", "Матка", "Коровка из Коровёнки",
"Йети", "Левиафан", "Хранитель подводного мира", "Небесный владыка").toArray(String[]::new);
//String lineFromFile;
String s = File.separator;
String path = s + "Users" + s + "Арслан" + s + "eclipse-workspace" + s + "BossCheck" + s + "src" + s + "Boss" + s + "Logs.txt";
Duration[] durations = read(path, bosses);
for (Duration duration : durations) System.out.println(durationToString(duration));
}
private static Duration[] read(String path, String[] bosses) throws IOException {
try (Stream<String> stream = Files.lines(Paths.get(path), Charset.forName("Windows-1251"))) {
return stream.filter(line -> Stream.of(bosses).anyMatch(e -> line.contains(e)))
.map(line -> parseToDuration(line))
.toArray(Duration[]::new);
}
}
public static Duration parseToDuration(String line) {
//TODO -> parse line, get h,m,s and put it to duration instead of 1,70,20 (stubs)
return Duration.ofHours(1).plusMinutes(70).plusSeconds(20);
}
private static String durationToString(Duration duration) {
return String.format(DURATION_PATTERN, duration.getSeconds() / 3600,
(duration.getSeconds() % 3600) / 60, (duration.getSeconds() % 60));
}
}
А вот теперь в методе parseToDuration вам нужно разобрать строку, которая вам приходит в аргументах. Причем лишних строк в этот метод уже не приходит (они фильтруются ранее). Получаем часы, минуты, секунды и подставляем их вместо заглушек в стандартный класс, хранящий временные промежутки - Duration.