2013-05-22 3 views
0

Я использую Java 6. У меня есть строка, содержащая «специальные» символы - «! @ # $%^& *() _". Как написать выражение Java, чтобы проверить, содержит ли еще одну строку «пароль» хотя бы один из символов, определенных в первой строке? У меня естьКак проверить, содержит ли строка хотя бы один символ из другой строки?

regForm.getPassword().matches(".*[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+].*") 

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

+0

как насчет положить все письма к одному ArrayList и второй букве слова к другому ArrayList? Затем вы будете перебирать буквы из одного списка и вызывать if contains (element) во втором списке? – deadfish

ответ

11

Вы можете попробовать создать регулярное выражение из строки, содержащей специальные символы и escape-символы, используя Pattern.quote. Попробуйте это:

String special = "[email protected]#$%^&*()_"; 
String pattern = ".*[" + Pattern.quote(special) + "].*"; 
regFrom.getPassword().matches(pattern); 
+0

У меня есть аналогичный, создайте шаблон, затем выполните команду 'password.replaceAll (pattern," ")', а затем сравните длину. но ваш лучше. +1 – Kent

+0

Из-за 'Pattern.quote' (символы' \ Q' и '\ E') внутри квадратных скобок это решение может не работать так, как вы ожидаете. – anubhava

+0

@ Никита, в какой версии Java есть этот метод? –

0

Одним из вариантов является использование StringTokenizer, и посмотреть, если он возвращает более 1 подстроку. Он имеет конструктор, который позволяет указывать символы для разделения.

В любом случае, мой любимый вариант будет просто повторять символы и использовать String.indexOf.

2

Я думаю, что просто перекручивание регулярного выражения для проверки каждого символа может работать лучше и будет работать на всех случаях:

String special = "[email protected]#$%^&*()_"; 
boolean found = false; 
for (int i=0; i<special.length(); i++) { 
    if (regFrom.getPassword().indexOf(special.charAt(i)) > 0) { 
     found = true; 
     break; 
    } 
} 
if (found) { // password has one of the allowed characters 
    //... 
    //... 
} 
+0

решение работает просто отлично, но зачем изобретать велосипед? –

+0

Могу ли я знать какое колесо было заново создано этим ответом? – anubhava

+0

Я хочу сказать, когда его легко достижимый по регулярному выражению, то, на мой взгляд, нам не нужно писать код, что вы думаете? –