繁体   English   中英

如何将 Pattern 和 Matcher 与 StringBuffer 或 char[] 类型而不是 String 一起使用?

[英]How can I use Pattern and Matcher with StringBuffer or char[] types instead of String?

我怎样才能使用这样的方法

private boolean respectPattern(String password) {
  Pattern passwordPattern = Pattern.compile(
    "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@$!%*?&])[A-Za-z\\d@$!%*?&.]{8,}$",
    Pattern.CASE_INSENSITIVE);
  Matcher matcher = passwordPattern.matcher(password);
  return matcher.find();
}

如果我用StringBufferchar[]替换password类型?

java util.regex.Pattern方法matcher()接受一个类型为CharSequence的单个参数,它是一个接口。 根据javadoc ,有几个实现类,包括StringBuffer 如果现有的实现都不适合您的需要,您可以随时编写自己的实现。

例如,使用CharBuffer

CharBuffer cb = CharBuffer.allocate(11);
cb.put(new char[]{'S','e','c', 'r', 'e', 't', ' ', 'P', 'a', 's', 's'});
Pattern passwordPattern = Pattern.compile(
                "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@$!%*?&])[A-Za-z\\d@$!%*?&.]{8,}$",
                Pattern.CASE_INSENSITIVE);
Matcher matcher = passwordPattern.matcher(cb);

如果我用 StringBuffer 或 char[] 替换密码类型?

如果用StringBuffer替换密码类型:

按原样使用,即以下内容将成功编译并按预期工作:

private boolean respectPattern(StringBuffer password) {
    Pattern passwordPattern = Pattern.compile(
            "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@$!%*?&])[A-Za-z\\d@$!%*?&.]{8,}$",
            Pattern.CASE_INSENSITIVE);
    Matcher matcher = passwordPattern.matcher(password);
    return matcher.find();
}

如果用char[]替换密码类型:

使用passwordPattern.matcher(String.valueOf(password));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM