Java. Убедитесь, что строка содержит только буквы, цифры, пробелы и тире.

StackOverflow https://stackoverflow.com/questions/749742

  •  09-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

  • между «0» и «9»
  • между «а» и «з»
  • между «А» и «Я»
  • пространство ' '
  • дефис '-'

Вот базовый пример кода (с использованием 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;
}

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

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

StringUtils.isAlphanumericSpace(string.replace('-', ' '));

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top