1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Phizzle, 25 май 2020.

Статус темы:
Закрыта.
  1. Автор темы
    Phizzle

    Phizzle Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Phizzle
    Привет всем, я хочу получать и обрабатывать время для допустим бана, по формату:
    /ban Steve 3d5m8s читы, следовательно игрока Steve забанит на 3 дня 5 минут 8 секунд, или например /ban Steve 6d9h40m12s, игрока забанит на 6 дней 9 часов 40 минут 12 секунд
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Юзай пробел, чтоб легче парсить было и читабельность была при написании 1d 1h 1m. Ну а там регулярка схавает.
     
    Последнее редактирование: 26 май 2020
  3. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Что-нибудь навроде этого. Писал в блокноте, за работоспособность не ручаюсь.
    Код:
    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. В результате время в секундах.
     
  4. Mavis

    Mavis Активный участник Пользователь

    Баллы:
    66
    Ответ выше, конечно, работать должен, но я бы использовал регулярные выражения тут
     
  5. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Именно они и используются же.
     
  6. Mavis

    Mavis Активный участник Пользователь

    Баллы:
    66
    Упс, спросоня не заметил. Прошу прощения
     
Статус темы:
Закрыта.

Поделиться этой страницей