2013-05-22 314 views
0

我正在使用Java 6.我有一个包含“特殊”字符的字符串 - “!@#$%^ & *()_”。如何编写Java表达式来检查另一个字符串“password”是否至少包含第一个字符串中定义的一个字符?我有如何检查一个字符串是否至少包含另一个字符串中的一个字符?

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

但我不想对特殊字符进行硬编码,而是将它们从属性文件加载到字符串中。所以我很难找出如何从文件中加载后正确地转义所有内容。

+0

怎么样把所有信件,一个ArrayList和单词的第二个字母到另一个数组列表?那么你将迭代来自一个列表中的字母,并调用是否在第二个列表中包含(元素)? – deadfish

回答

11

您可以尝试使用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

@Nikita,哪个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

我的意思是说什么时候可以通过正则表达式很容易实现,然后我认为我们不需要编写代码,您怎么看? '正则表达式很容易实现' –

相关问题