Помогите Обработка строк

  • Автор темы Автор темы Phizzle
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Phizzle

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Phizzle
Привет всем, я хочу получать и обрабатывать время для допустим бана, по формату:
/ban Steve 3d5m8s читы, следовательно игрока Steve забанит на 3 дня 5 минут 8 секунд, или например /ban Steve 6d9h40m12s, игрока забанит на 6 дней 9 часов 40 минут 12 секунд
 
Юзай пробел, чтоб легче парсить было и читабельность была при написании 1d 1h 1m. Ну а там регулярка схавает.
 
Последнее редактирование:
Что-нибудь навроде этого. Писал в блокноте, за работоспособность не ручаюсь.
Код:
private static final Pattern TIME = Pattern.compile("\d+[a-zA-Z]*");
private static final Pattern PRE_TEXT = Pattern.compile("(?=[a-zA-Z])");

public long parseTime(String str) {
    Matcher matcher = TIME.matcher(str);
    long overallTime = 0;
    while(matcher.find()) {
        String[] split = PRE_TEXT.split(matcher.group());
        long time = Long.parseLong(split[0]);
        switch(split[1]) {
            case "y":
                overallTime += time*31536000;
                break;
               
            case "w":
                overallTime += time*604800;
                break;
               
            case "d":
                overallTime += time*86400;
                break;
               
            case "h":
                overallTime += time*3600;
                break;
               
            case "m":
                overallTime += time*60;
                break;
               
            default:
                overallTime += time;
        }
    }
   
    return overallTime;
}
Сначала ищем в строке комбинации ЧислоTекст, потом разделяем найденное через look-ahead. В результате время в секундах.
 
Ответ выше, конечно, работать должен, но я бы использовал регулярные выражения тут
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх