有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用matches()检查字符串中的特定字符

我要做的是拒绝任何包含a-z、0-9或a-z以外字符的字符串_

我试着使用下面的匹配功能,正如我在别处看到的那样,但我无法让它正常工作。它要么告诉我绳子没有问题,要么告诉我绳子有问题

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) 个答案

  1. # 1 楼答案

    stringToCheck.String.matches("[^0-9a-zA-Z_]")

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

  2. # 2 楼答案

    substring的end index参数是独占的,因此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;
    

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

  3. # 3 楼答案

    试试这个:

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

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

    javadoc链接到Pattern class(regex解释和示例)

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