使用matches()

时间:2018-03-31 23:01:23

标签: java

我想要做的是拒绝任何包含a-z,0-9或_

之外的字符的字符串

我尝试使用下面的匹配函数作为其他地方看到的ID,但我无法让它正常工作。它会告诉我字符串在没有的情况下是好的,或者它会告诉我它不是很好。

public static Boolean checkc(String word) {
    String w = word;
    for (int i = 0; i < w.length(); i++) {
        if (w.substring(i, i).matches("[A-Za-z0-9_]")) {
            return true;

        }
    }
    return false;
}

现在逻辑可能是错误的,因为我试图让它工作但是为了公平,它首先不起作用。我正在检查调用它的函数中的一些东西,所以我只需要知道它是否符合规则的字符串。

3 个答案:

答案 0 :(得分:3)

substring的结束索引参数是独占的,因此substring(i, i)始终返回0长度的字符串。你可以使用substring(i, i+1)解决这个问题,但是没有理由在这里使用循环。您可以使用word.matches("[A-Za-z0-9_]+")并立即检查整个字符串。正则表达式量词+表示“一个或多个”。您还可以使用量词*,这意味着“零或更多”,如果该字符串为空,则该方法应返回true。

编辑:我刚注意到你的循环逻辑还有另一个问题。循环中的条件在第一次满足条件时返回true:

for (...) {
    if ( /* condition is met */ )
       return true;
}
return false;

该逻辑仅要求条件至少满足一次,然后返回true,但您可能需要以下内容:

for (...) {
    if (! /* condition is met */ )
       return false;
}
return true;

这要求每个角色都满足条件。

答案 1 :(得分:2)

试试这个:

public static boolean check(String word) {
    return word.matches("[^a-zA-Z0-9_]+");
}

word字符串不包含方括号中描述的单个字符时,此方法返回true,^ regex符号表示与逻辑相同! (例如!true == false)。在方括号后加上符号+表示一个符号[]可能会重复一次或多次。

javadoc链接到Pattern class(正则表达式解释和示例)

Regex101方便的在线正则表达式调试工具

答案 2 :(得分:0)

  

stringToCheck.String.matches(&#34; [^ 0-9A-ZA-Z _]&#34)

这将检查需要匹配的字符串是否包含任何数字或字母并返回布尔值