如果名称与正则表达式匹配,我有一个必须返回true的方法;如果名称有特殊字符或数字,则返回null。
这是方法:
@SuppressWarnings("null")
public boolean containsSpecialCharacters(String text) {
Pattern p = Pattern.compile("/^[a-zA-Z\\s]+$/");
//check if the name has special characters
Matcher m = p.matcher(text);
boolean b = m.find();
//cast the null to boolean
Boolean boolean1 = (Boolean) null;
if (m.matches()) {
return true;
}
else {
return boolean1;
}
}
这是对无法通过的方法的测试:
@Test
public void parseBeanCheck() throws NumberFormatException, IOException, SAXException, IntrospectionException {
IngenicoForwardingHelper helper = new IngenicoForwardingHelper();
String test1 = "Steve Jobs";
Assert.assertTrue(helper.containsSpecialCharacters(test1));
//This should return Null
String test2 = "Steve Jobs1";
Assert.assertNull(helper.containsSpecialCharacters(test2));
//This should return Null
String test3 = "Steve Jöbs";
Assert.assertNull(helper.containsSpecialCharacters(test3));
}
答案 0 :(得分:4)
您的方法返回boolean
,这是一种只允许值为true
和false
的基本类型。它不允许null
,因此assertNull()
的测试永远不会有效!
您可以更改方法签名以返回Boolean
,但如果可能,通常最好避免从方法返回null
。无论如何,返回true
或false
比true
或null
更有意义。
在Java中,你的正则表达式不需要(也不应该有)开头和结尾的斜杠。
您可以将代码更改为以下内容:
public boolean containsSpecialCharacters(String text) {
Pattern p = Pattern.compile("^[a-zA-Z\\s]+$");
Matcher m = p.matcher(text);
return !m.matches();
}
甚至更简单:
public boolean containsSpecialCharacters(String text) {
return !text.matches("[a-zA-Z\\s]+");
}
对这样的测试:
@Test
public void parseBeanCheck() throws NumberFormatException, IOException, SAXException, IntrospectionException {
IngenicoForwardingHelper helper = new IngenicoForwardingHelper();
Assert.assertFalse(helper.containsSpecialCharacters("Steve Jobs"));
Assert.assertTrue(helper.containsSpecialCharacters("Steve Jobs1"));
Assert.assertTrue(helper.containsSpecialCharacters("Steve Jöbs"));
}
还值得一提的是\s
不仅会匹配空格,还会匹配标签,换行符,回车等。所以请确保这就是你想要的。
答案 1 :(得分:-1)
您应该将特殊字符检查简化为:
public boolean containsSpecialCharacters(String text) {
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
return m.find();
}
使用Assert.assertTrue
和Assert.assertFalse
进行测试