Регулярное выражение для проверки строки импорта в java

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

Например, эта строка верна: package mx.com.example.aplication;

Но это неверно: Package mx. com. example.aplication

Я должен проверить всю структуру с точками и прописными буквами.

У меня есть это:

^(\bpackage)[\s]{1}[A-Za-z]

Я не могу заставить свою строку оценивать конец с помощью ;

не могу заставить мою строку оценивать конец с помощью ; Вам не подходит ;$?
Abra 08.07.2019 18:06

разве вы не должны допускать пробелы после точки с запятой?

Gonen I 08.07.2019 18:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Прямо сейчас ваше регулярное выражение просто читает слово package, пробел и затем одну букву. Регулярное выражение ниже должно работать с вашим примером. ^((?:[a-z][a-z\-\_]+))(\s+)((?:[a-z][a-z\.\d\-\_]+)\.(?:[a-z][a-z\-\_]+))(?![\w\.])\s*(;)$ Приведенный выше код регулярного выражения допускает слово «пакет», за которым следует пробел, за которым следует полное доменное имя, а затем точка с запятой. Таким образом, он проверит всю строку.

Хейс Роуч, я пробовал с вашим выражением, и оно работает, но если я попробую с большей линией, то это не сработает :(

Sebastian Ruiz Perez 08.07.2019 21:28

О, хорошо, это странно, и что вы подразумеваете под большей линией? Я хочу понять, почему это не работает @SebastianRuizPerez

Hayes Roach 08.07.2019 22:38

@SebastianRuizPerez Это должно работать с любой длиной. Можете ли вы опубликовать, какую линию вы использовали, которая не работала?

Hayes Roach 08.07.2019 23:00

Я увидел свою ошибку, в моей строке могли быть символы _ и - кстати, если бы моя строка была такой: ‘mx.com.example.whatever; другие слова «Я получаю истину, но я должен получить ложь, моя строка должна заканчиваться на ;

Sebastian Ruiz Perez 08.07.2019 23:20

@SebastianRuizPerez Я отредактировал ответ, включив в него _ и -. Он должен закончить его; сейчас. Вы можете проверить это?

Hayes Roach 09.07.2019 17:33
Ответ принят как подходящий

Следующее регулярное выражение должно работать:

^\s*package\s*\w+\s*(?:\.\s*\w+\s*)*;\s*$

Обратите внимание, что в java допустимо иметь более одного пробела между частями объявления пакета:

package     java  .  util   ;

Регулярное выражение позволяет это. Если вы не хотите этого по какой-либо причине, это регулярное выражение делает свое дело:

^package \w+(\.\w+)*;$

Другие вопросы по теме