Валидация - Использование регулярных выражений и обрезки в строках Java - PullRequest
1 голос
/ 29 марта 2011

Меньше вопросов и больше проверок, я думаю, но я создал приложение Java для просмотра списка доступных сетей через linux, и я просто хотел посмотреть, знает ли кто-нибудь о лучшем / более эффективном способе сделать это.

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

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

String t = s.replace("SSID:", "");
t = t.replace("\"", "");
t = t.trim();

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Как уже говорили другие, это похоже на случай преждевременной оптимизации.Я просто хочу обратиться к вашим (очевидным) заблуждениям о replace() и регулярных выражениях.

Метод replace() обрабатывает поисковый термин как точную строку, а не как регулярное выражение.Это replaceAll(), который выполняет сопоставление регулярных выражений;с его помощью вы можете объединить две replace() операции в одну, например так:

String t = s.replaceAll("\"|SSID:", "").trim();

Вы можете даже исключить вызов trim() и выполнить все с помощью replaceAll():

String t = s.replaceAll("\"|SSID:|^\\s+|\\s+$", "");

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

0 голосов
/ 29 марта 2011

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

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

В качестве примера: вы можете использовать один String.replaceAll() со смесью захватаи группы без захвата, чтобы удалить все из ввода, кроме нужного вам бита.Это позволяет сохранить шаблон в файле конфигурации, поэтому вам не нужно переписывать алгоритм замены каждый раз, когда изменяется выходной формат.Более того, вы можете иметь несколько шаблонов в конфигурационном файле, по одному для каждого известного варианта, и вы можете проверить, какой из них соответствует вашему вводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...