【发布时间】:2019-05-13 15:29:02
【问题描述】:
我写了一个让我添加类别的程序,因为它在第一个位置有一些特殊字符和数字的问题,我做了一个正则表达式过滤器,它应该只处理特殊字符。但是,如果我现在使用包含数字的单词,该方法也会由于某种原因返回 true。
private boolean containsSpecChar () {
Pattern pattern = Pattern.compile("[a-zA-Z0-9]");
Pattern p = Pattern.compile("[0-9a-zA-Z]");
String a = null;
a = txtInKategorieName.getText();
Matcher match= pattern.matcher(a);
Matcher m = p.matcher(a);
if (
match.matches() || m.matches()
)
{
return false;
}
else
{
return true;
}
}
我也希望能够使用包含数字的单词。 谢谢
【问题讨论】:
-
你想在什么条件下准确返回
true? -
[0-9a-zA-Z]和[a-zA-Z0-9]实际上是相同的,即它们匹配相同的字符。 -
你为什么不对任何不是字母或数字的东西做
find? -
另请注意,
Matcher.matches()会尝试匹配 整个 输入,因此任何长度不是 1 的字符串都将不匹配。您的检查“containsSpecChar”似乎被定义为“如果有一个不是 a-z、A-Z 或 0-9 的字符” - 所以要么使用return a.matches(".*[^a-zA-Z0-9].*")、return !a.matches("[a-zA-Z0-9]+")或使用Matcher.find()以及表达式[^a-zA-Z0-9](如果find()返回 true,则字符串至少包含一个非 ascii 字母或数字的字符。
标签: java regex pattern-matching