Имена пользователей и пробелы [закрываются]

java.time
    DateTimeFormatter logDtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");

    String[] logMessages = {
            "2017-01-31 01:33:30 random text log message x",
            "2017-01-31 08:34:30 sdfsd log message y",
            "2017-01-31 11:35:30 sdfsdfsdf log message z",
            "2017-01-31 12:30:30 random text log message x",
            "2017-01-31 13:31:30 sdfsd log message y",
            "2017-01-31 14:32:30 sdfsdfsdf log message z",
            "2017-01-31 16:32:35 sdfsdfsdf log message a",
            "2017-01-31 16:33:30 random text log message x",
            "2017-01-31 16:34:30 sdfsd log message y",
            "2017-01-31 16:35:30 sdfsdfsdf log message z",
            "2017-01-31 16:36:35 sdfsdfsdf log message a"
    };

    String time1 = "2017-01-31 12:00:00";
    String time2 = "2017-01-31 15:00:00";

    LocalDateTime start = LocalDateTime.parse(time1, logDtf);
    LocalDateTime end = LocalDateTime.parse(time2, logDtf);

    Arrays.stream(logMessages)
            .filter(lm -> {
                TemporalAccessor parsedDateTime = logDtf.parse(lm, new ParsePosition(0));
                LocalDateTime logDateTime = LocalDateTime.from(parsedDateTime);
                return ! logDateTime.isBefore(start)
                        && logDateTime.isBefore(end);
            })
            .forEach(System.out::println);

Вывод этого кода - то, что вы просили:

2017-01-31 12:30:30 random text log message x
2017-01-31 13:31:30 sdfsd log message y
2017-01-31 14:32:30 sdfsdfsdf log message z
blockquote>

Я использую java.time, современный API даты и времени Java. Я всегда рекомендую его для любой даты и времени на Java. Мне так приятно работать.

Я фильтрую интервал полуоткрытого между вашими временами. Это означает, что сообщение журнала с отметкой 2017-01-31 12:00:00 будет включено, а сообщение с отметкой 2017-01-31 15:00:00 не будет включено. Это обычное и рекомендуемое использование временных интервалов. Одним из преимуществ является то, что при фильтрации по смежным (не перекрывающимся) интервалам каждое сообщение журнала гарантированно будет включено ровно один раз.

Если ваш массив очень большой и всегда сортируется, а производительность имеет значение, вы можете воспользоваться бинарным поиском для начала и конца требуемого интервала. Посмотрите, если это актуально, и вы еще не знаете, что это такое.

Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time.

6
задан raven 14 December 2009 в 15:57
поделиться

7 ответов

Я воображаю, потому что некоторый код где-нибудь все еще обрабатывает вход, поскольку ряд пространства разделил параметры, очень способ, которым дескрипторы командной строки Windows закрыли кавычки имена файлов. Например, если бы необходимо было передать имя пользователя внешнему исполняемому процессу, записанному в C, куда имя пользователя было передано командной строке, это прибыло бы в приложение C как два аргумента.

В то время как этого не могло бы произойти очень на практике больше, почти такое же как много специальных символов, я предполагаю, что это - причина почему там.

2
ответ дан 16 December 2019 в 21:48
поделиться

Я думаю в действительности, что это - вероятно, одна из тех конвенций, которая должна быть повреждена. Большинство систем теперь имеет дело с большим количеством сложных данных и привыкло к корректной обработке текста, который включает пробелы. Я был рад обнаружить, что fogbugz (другой разъем) примет Ваш адрес электронной почты, Ваше имя пользователя или Ваше настоящее имя, поскольку Вы ввели его как свое имя пользователя, когда Вы входите в систему.

Это - просто конвенция, которая является все еще вокруг со дней 8 имен файлов буквы и вероятно также 8 имен пользователей буквы. Я предложил бы, чтобы Вы позволили его в своем веб-приложении и позволили миру следовать за Вами.:)

2
ответ дан 16 December 2019 в 21:48
поделиться

Единственная причина, которую я знаю этого, имеет любой смысл, то, что, если Вы анализируете маркеры на пробеле, помещая пространство в имя пользователя, заставит это перестать работать.

Однако я действительно соглашаюсь с Вами: в сегодняшней среде существует, вероятно, не большая причина продолжить делать его, кроме того, где совместимость с прежними системами имеет смысл (*nix, и т.д.).

0
ответ дан 16 December 2019 в 21:48
поделиться

Я думаю, потому что обычно это - тенденция обрезать значения поля ввода, прежде чем они будут на самом деле сохранены, скажут в Базе данных.

Так как мы урезаем пробелы и если мы позволяем им в пароле или имени пользователя, можно предположить, что будет большая проблема, если пользователь ввел пароль как "PWD".

0
ответ дан 16 December 2019 в 21:48
поделиться

Это предотвращает смутно комбинации аналогичного имени, например, "John Smith" и "JohnSmith". Это также помогает автоматически распознать имена, которые появляются в рамках текста.

0
ответ дан 16 December 2019 в 21:48
поделиться

Это зависит, где они собираются быть используемыми. Не использование пробелов на имена пользователя UNIX имеет смысл по той же причине, имеет смысл не использовать их в именах файлов Unix - они - боль для ввода в командной строке. Тем не менее Unix действительно позволяет пробелы в именах пользователей, а также в именах файлов.

Я не вижу причины вещей как веб-приложения для не разрешения пробелов.

На самом деле вещью, которая раздражает меня больше всего, являются веб-приложения, не позволяющие в именах пользователей. То, когда это - что-то с миллионами пользователей возможности имени, я действительно хочу быть доступным, является маленьким, таким образом, мне нравится использовать мой адрес электронной почты, который, по крайней мере, как гарантируют, будет уникален.

0
ответ дан 16 December 2019 в 21:48
поделиться

Одна тонкая проблема, связанная с пробелами в именах пользователей, заключается в том, что символ пробела «невидим», и два последовательных пробела могут выглядеть очень похоже на один пробел. Ошибки, возникающие при вводе двух пробелов вместо одного, может быть трудно обнаружить, и это одна из причин, чтобы запретить пробелы все вместе.

Некоторые системы могут запрещать пробелы, но все же разрешать неразрывное пространство. Умный пользователь может использовать этот факт для включения пробела в свое имя пользователя.

4
ответ дан 16 December 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: