Я бы посоветовал с осторожностью.Есть две проблемы:
Первая проблема заключается в том, что регулярные выражения, подобные той, что вы показали нам, могут страдать от проблем производительности, когда строка не совпадает.В частности, вы получаете много ненужного обратного отслеживания перед неудачей матча.
(Можно избежать обратного отслеживания, используя «неохотные» или «притяжательные» квантификаторы, а не «жадные» квантификаторы, но вы должны понимать,что вы делаете.)
Тем не менее, если строка не короткая, вероятно, будет более эффективно попытаться декодировать base64 с использованием метода Base64.Decoder::decode
и перехватить возможное исключение, чем использовать регулярное выражениепроверить.И у вас есть потенциальный бонус, что у вас есть декодированные данные.
(Возможно, в качестве ускорения вы могли бы проверить первые 4 и последние 4 символа перед попыткой полного декодирования base64.)
Вторая проблема заключается в том, что (теоретически) строка может быть синтаксически допустимой как Base64, но она была получена другим «процессом».Таким образом, когда вы декодируете строку, вы можете получить мусор.Поэтому, возможно, стоит расшифровать строку и проверить, что внутри ... как часть вашей проверки.
Я знаю, что могу использовать некоторый метод try catch.Но это дорогая операция для Java.
Все относительно.Кроме того, более новые JVM могут генерировать и обрабатывать исключения более эффективно благодаря некоторым оптимизациям, введенным (я думаю) в Java 8.