如何使用Matches()和Pattern correctley

时间:2017-12-05 19:14:24

标签: java regex

我正在为学校做作业,需要建立一个学生班。构造函数将收到一个String,“学生名”。我需要验证用户给定的字符串是否只包含来自a-z,A-Z和数字0-9的字母。

从在线查看这是我找到的

boolean ans = true;
String str = ("Maor Rocky");
Pattern pattern = Pattern.compile("[A-Za-z0-9]\\w+");
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.group());

if (!str.matches("[a-zA-Z0-9//s+]"))
    ans = false;

System.out.println(ans);

我知道它遗漏了一些东西,但我还没有掌握模式和匹配器的想法。

4 个答案:

答案 0 :(得分:0)

如果你有一个类型为String的变量学生将持有学生姓名,那么简单的检查是这样的(这里不需要使用Pattern或Matcher类):

String student = scanner.next();
if (student.matches("[\\w]*"))
    //do something for valid username
else
    //do something for invalid username

或者每个初学者都这样做:

    String student = scanner.next();

    for (int i = 0; i < student.length(); i++) {
        if (!Character.isLetterOrDigit(student.charAt(i)))
            //do something for invalid username;
    }

答案 1 :(得分:0)

你需要这样的东西:

public class Student {

    private String name;

    public Student(String name) throws IllegalArgumentException {
        if (!name.matches("[\\w]*")) {
            throw new IllegalArgumentException("name should contain only alphanumeric chars.");
        }
        this.name = name;
    }

    public String getName() {
       return name;
    }
}

答案 2 :(得分:0)

要了解Matcher的用法,您应该看到This link

在此示例中,Matcher和Pattern对象没有执行任何操作,因为您正在使用与regexp一起使用的String方法。如果你想使用匹配器,你会看起来像这样

if(matcher.matches())
    ans=false;

答案 3 :(得分:0)

感谢每一个人,这是我编写的代码并且有效:

boolean ans = true;
    if (!name.matches("^[a-zA-Z0-9 ]+$")) {
        ans = false;