Проверьте нечисловые символы в строке - PullRequest
5 голосов
/ 30 сентября 2011

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

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

В настоящее время я реализовал это с помощью блока try-catch: я проанализировал строку в Integer в блоке try и проверил исключение NumberFormatException в блоке catch. Пожалуйста, предложите, если я ошибаюсь.

Ответы [ 2 ]

24 голосов
/ 30 сентября 2011

Вы можете проверить это с помощью регулярного выражения.

Предположим, что (только числовые значения):

String a = "493284835";
a.matches("^[0-9]+$"); // returns true

Предположим, что (только буквенно-цифровые значения):

String a = "dfdf4932fef84835fea";
a.matches("^([A-Za-z]|[0-9])+$"); // returns true

Как Pangea сказал в области комментариев:

Если производительность критична, предпочтительно скомпилировать регулярное выражение. Ниже приведен пример:

String a = "dfdf4932fef84835fea";
Pattern pattern = Pattern.compile("^([A-Za-z]|[0-9])+$");
Matcher matcher = pattern.matcher(a);

if (matcher.find()) {
    // it's ok
}
6 голосов
/ 30 сентября 2011

Просто Google, я обнаружил эту ссылку

 public boolean containsOnlyNumbers(String str) {        
        //It can't contain only numbers if it's null or empty...
        if (str == null || str.length() == 0)
            return false;

        for (int i = 0; i < str.length(); i++) {

            //If we find a non-digit character we return false.
            if (!Character.isDigit(str.charAt(i)))
                return false;
        }

        return true;
    }

Редактировать: RegExp для проверки числового должно быть:

return yourNumber.matches("-?\\d+(.\\d+)?");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...