Java, убедитесь, что строка содержит только буквы, цифры, пробелы и тире - PullRequest
5 голосов
/ 15 апреля 2009

В Java мне нужно убедиться, что строка содержит только символы alphanumeric, space и dash.

Я нашел класс org.apache.commons.lang.StringUtils и почти адекватный метод isAlphanumericSpace(String) ... но мне также нужно включить тире.

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

Ответы [ 5 ]

11 голосов
/ 15 апреля 2009

Вы можете использовать:

StringUtils.isAlphanumericSpace(string.replace('-', ' '));
6 голосов
/ 15 апреля 2009

Хум ... просто запрограммируйте его самостоятельно, используя String.chatAt ( int ), это довольно просто ...

Итерация по всем символам в строке с использованием индекса позиции, затем сравнение с использованием факта, что символы ASCII от 0 до 9, от a до z и от A до Z используют последовательные коды, поэтому вам нужно только проверьте, что символ x численно проверяет одно из условий:

  • между '0' и '9'
  • между 'a' и 'z'
  • между 'A и' Z '
  • пробел ''
  • дефис '-'

Вот базовый пример кода (с использованием CharSequence, который позволяет передавать String, а также StringBuilder в качестве аргумента):

public boolean isValidChar(CharSequence seq) {
    int len = seq.length();
    for(int i=0;i<len;i++) {
        char c = seq.charAt(i);
        // Test for all positive cases
        if('0'<=c && c<='9') continue;
        if('a'<=c && c<='z') continue;
        if('A'<=c && c<='Z') continue;
        if(c==' ') continue;
        if(c=='-') continue;
        // ... insert more positive character tests here
        // If we get here, we had an invalid char, fail right away
        return false;
    }
    // All seen chars were valid, succeed
    return true;
}
3 голосов
/ 15 апреля 2009

Просто переберите строку, используя методы класса символов в java.lang.Character, чтобы проверить, является ли каждый символ приемлемым или нет. Вероятно, это все, что делают методы StringUtils, а регулярные выражения - это всего лишь способ заставить обобщенный движок делать то же самое.

1 голос
/ 15 апреля 2009

У вас есть 1 из 2 вариантов: 1. Составьте список символов, которые МОГУТ быть в строке, затем выполните цикл проверки строки, чтобы убедиться, что каждый символ находится в списке. 2. Составьте список символов, которые НЕ МОГУТ быть в строке, затем зациклите проверку строки, чтобы убедиться, что каждого символа в списке нет.

Выберите любой вариант, чтобы быстрее составить список.

0 голосов
/ 28 июня 2015

Определенно используйте выражение регулярного выражения. Нет смысла писать свою собственную систему, когда для этой конкретной задачи создана очень всеобъемлющая система. Если вам нужно узнать о регулярных выражениях или освежить в них информацию, посетите этот веб-сайт, это здорово: http://regexr.com

Я бы бросил себе вызов в этом.

...