Строковый шаблон, который не позволяет первому символу быть пробелом

1

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

String pattern = "[^\\s][a-zA-Z0-9\\W ]+";"

и "([a-zA-Z0-9\\W]+)|(([a-zA-Z0-9\\W]+\\s[a-zA-Z0-9\\W]+)+)" а также несколько других вариантов, без успеха. Любая помощь будет принята с благодарностью.

Я использую Java btw

  • 1
    Вы пробовали string.charAt(0)==' ' ? Зачем использовать регулярное выражение ?
  • 4
    Попробуйте: String pattern = "^\\S.*$"
Показать ещё 1 комментарий
Теги:
string
whitespace

3 ответа

2
Лучший ответ

Это работает

^[^\s].*

Первый кареток обозначает начало строки и второе отрицание.

2

Большинство регулярных выражений, соответствующих по умолчанию, для поиска в любом месте строки для шаблона. Поскольку вы особенно заинтересованы в начале строки, вы должны префикс всего регулярного выражения '^', чтобы привязать соответствие к началу ввода.

String pattern = "^[^\\s][a-zA-Z0-9\\W ]+";

Это может быть немного запутанным, поскольку ^ имеет совсем другое значение, когда оно появляется внутри квадратных скобок. Внутри скобок, как вы знаете, он сигнализирует о соответствии набора (т.е. всех символов, кроме) набора символов, перечисленных в скобках. Снаружи это просто якорь для начала строки.

В этом не-скобочном использовании это противоположность $ которая привязывает совпадение в конце строки, например /end$/ будет соответствовать "другу", но не "окончанию" - вы можете больше узнать об якорях по этому URL-адресу: http://www.regular-expressions.info/anchors.html

  • 0
    Большое спасибо, это работает отлично. Случайно ли вы могли бы дать мне краткое объяснение того, как это на самом деле работает? Я изучаю Java всего несколько месяцев, так что для меня это звучит так: «Не пространство, а пространство, за которым следует почти все». Опять же, помощь будет много значить
  • 0
    обновлено с объяснением согласно вашему запросу
0

Поскольку вы не заботитесь обо всем остальном, вы можете просто использовать String.charAt(int) с Character.isSpaceChar(char) или String.codePointAt(int) с Character.isSpaceChar(int).

Второй метод - это правильный способ обработки строки и кодовой строки Юникода в астральной плоскости, тогда как первый метод не работает, но может использоваться, когда ваш ввод имеет только символ из базовой многоязычной плоскости (BMP).

Код для второго метода:

boolean startWithSpace = Character.isSpaceChar(input.codePointAt(0));

Character.isSpaceChar проверяет любой символ пробела в соответствии с Unicode. Не путать с Character.isWhitespace, который проверяет пробельный символ в соответствии с Java.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню