检查Java正则表达式中的特定字符

时间:2019-01-27 18:50:52

标签: java regex

如何检查字符串是否仅包含一个特定字符? 例如:

在字符串square/retrofitsquare/retrofit/issues上,我需要检查字符串是否有多个/字符。

square/retrofit/issues必须为假,因为必须有多个/个字符,而square/retrofit必须为真。

字符串可以有数字。

2 个答案:

答案 0 :(得分:2)

您不需要正则表达式。简单的indexOflastIndexOf方法就足够了。

boolean onlyOne = s.indexOf('/') == s.lastIndexOf('/');

编辑1
当然,如果/没有出现在给定的字符串中,则将是true。因此,为避免这种情况,您还可以检查从这些方法之一返回的索引。

编辑2
工作解决方案:

class Strings {
    public static boolean availableOnlyOnce(String source, char c) {
        if (source == null || source.isEmpty()) {
            return false;
        }

        int indexOf = source.indexOf(c);
        return (indexOf == source.lastIndexOf(c)) && indexOf != -1;
    }
}

测试用例:

System.out.println(Strings.availableOnlyOnce("path", '/'));
System.out.println(Strings.availableOnlyOnce("path/path1", '/'));
System.out.println(Strings.availableOnlyOnce("path/path1/path2", '/'));

打印:

false
true
false

答案 1 :(得分:0)

或者如果您想对流使用更现代的方法:

boolean occursOnlyOnce(String stringToCheck, char charToMatch) {
    return stringToCheck.chars().filter(ch -> ch == charToMatch).count() == 1;
}

免责声明:这不是最佳方法。

更加优化的方法:

    boolean occursOnlyOnce(String stringToCheck, char charToMatch) {
    boolean isFound = false;
    for (char ch : stringToCheck.toCharArray()) {
        if (ch == charToMatch) {
            if (!isFound) {
                isFound = true;
            } else {
                return false; // More than once, return immediately
            }
        }
    }
    return isFound; // Not found
}