Regex соответствует только первому появлению - PullRequest
0 голосов
/ 12 апреля 2020

Допустимый формат электронной почты: word_character@word_character.word_character ..

Я пытался использовать (\b\w+\b@\b\w+\b\.\b\w+\b) регулярное выражение, но оно совпадает только сначала:

Код:

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        Pattern p = Pattern.compile("(\b\w+\b@\b\w+\b\.\b\w+\b)");
        String s= "";
        while (t-- > 0) {
            s += in.next();
        }
        Matcher m = p.matcher(s);
        int count = 0;
        while (m.find()) {
            count++;
        }
        System.out.println(count);
    }

Ввод:

1

a1@gmail.com b1@gmail.com c1@gmail.com

Output: 1

Expected output: 3

1 Ответ

2 голосов
/ 12 апреля 2020

Вы не добавляете пробел для разделения писем.

Сделайте это следующим образом:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("How many emails do you want to enter?: ");
        int t = in.nextInt();
        Pattern p = Pattern.compile("(\\b\\w+@\\w+\\.\\w+\\b)");
        String s = "";
        while (t-- > 0) {
            s += in.next() + " "; // Add space here
        }
        Matcher m = p.matcher(s);
        int count = 0;
        while (m.find()) {
            count++;
        }
        System.out.println(count);
    }
}

Пример прогона:

How many emails do you want to enter?: 3
a1@gmail.com b1@gmail.com c1@gmail.com
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...