Поиск электронной почты в текстовом файле и сортировка информации по электронной почте

У меня есть текстовый файл, который предположительно будет выглядеть так

Я Хакан. Мой адрес электронной почты [removed_email]u, и как вас зовут? Привет, меня зовут Tarikul, и мой любимый адрес электронной почты: [removed_email]

im должен создать программу, которая будет находить электронные письма в хранилище файлов, имя пользователя, domaian, субдомен и расширение, а затем переписать их в другой текстовый файл.

import java.io.* ;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.PrintWriter;
import java.io.FileOutputStream;

public class Try {
 public static void main(String[] args) {
 Email [] storage;// email is a class that was made to store the data
 try {
 Scanner input= new Scanner("inputemails.txt");
 PrintWriter output= new PrintWriter("outputemails.txt");

 }

 catch (FileNotFoundException e) {
 System.out.print("File not found");
 System.exit(0);}
 int i=0;
 while(input.hasNextLine()){
 if(input.contains("@"));
 {
 storage[i]=
 }
 }


 }

}

это то, что я до сих пор, его не так много, но как я могу найти его в текстовом файле?

также я подумал, что было бы лучше, если бы я добавил фактические инструкции к моему заданию, я не просил никого делать всю прогамму jus, как бы я отделял данные, которые мне нужно найти

<ol> <li> Подключитесь к внешнему входному файлу. Имя входного файла всегда будет inputemails.txt, поэтому, пожалуйста, не спрашивайте имя файла в вашей программе.</li> <li> Определите адреса электронной почты в файле.</li> <li> Если у электронной почты нет субдомена, создайте объект электронной почты для этого письма.</li> <li> Если у электронной почты есть поддомен, пожалуйста, создайте объект UniversityEmail для этого письма.</li> <li> Сохраните все электронные письма в том же (одном) списке массивов.</li> <li> После того, как вы скопируете все электронные письма из файла в список массивов, спросите пользователя, какой тип сообщений электронной почты будет включен в выходной файл. Если пользователь вводит 0, напишите письма, которые не имеют поддомена в списке массивов. Обратите внимание, что выходной файл должен начинаться с номера, указывающего количество писем в файле. Если пользователь вводит число от 1 до 7, напишите все электронные письма из определенного отдела в выходном файле. Обратите внимание, что выходной файл должен начинаться с номера, указывающего количество писем в файле. Пользователь может ввести только одно целое число от 0 до 8</li> </ol>

и субдомены, о которых он говорит, являются

1 art 2 chee 3 chem 4 coe 5 cs 6 egr 7 polsci

1 ответ

public static void fillEmailsHashSet(String line,HashSet<string> container){

 Pattern p = Pattern.compile("([\\w\\-]([\\.\\w])+[\\w]+@([\\w\\-]+\\.)+[A-Za-z]{2,4})");
 Matcher m = p.matcher(line);

 while(m.find()) {
 container.add(m.group(1));
 }

 }
</string>

Здесь вы можете найти пример чтения файла: тут

РЕДАКТИРОВАТЬ:

Пример с вводом/выводом:

public static void emails() {
 HashSet<string> hs = new HashSet<>();
 FileReader file = null;
 try {
 file = new FileReader(new File("emails.txt"));
 } catch (FileNotFoundException e1) {
 System.err.println("File emails.txt not found!");
 e1.printStackTrace();
 }
 BufferedReader br = new BufferedReader(file);
 String line;
 try {
 while ((line = br.readLine()) != null) {
 fillEmailsHashSet(line, hs);
 }

 } catch (IOException e) {
 System.err.println("Error when reading");
 e.printStackTrace();
 } finally {
 if (br != null) {
 try {
 br.close();
 } catch (IOException e) {
 System.err.println("Unexpected error");
 e.printStackTrace();
 }
 }
 }
 for (String string : hs) {
 System.out.println(string);
 }
 }
</string>

EDIT (2): более компактным способом будет использование try-with-resources

public static void emails() throws IOException {
 HashSet<string> hs = new HashSet<>();
 FileReader file = null;
 try (BufferedReader br = new BufferedReader(new FileReader(new File("emails.txt")))) {
 String line;
 while ((line = br.readLine()) != null) {
 fillEmailsHashSet(line, hs);
 }
 for (String string : hs) {
 System.out.println(string);
 }
 }
}
</string>

Содержимое входного файла:

dolor ac egestas purus [removed_email] Vestibulum justo. magna vulputate Morbi [removed_email]
[removed_email] Nulla nec dui. adipiscing in [removed_email] [removed_email]
sapien urna mi [removed_email] vitae aliquam In eget Pellentesque [removed_email] tellus.
non sollicitudin faucibus et mi justo, sit nibh dapibus potenti. venenatis venenatis, molestie sed Proin fermentum elementum.
Sed ut velit venenatis [removed_email] dignissim
consequat condimentum, porttitor Lorem nibh felis,
ullamcorper eros. ut diam vel ipsum nisi luctus. ultrices sem amet non Aliquam aliquet lobortis mauris Vestibulum est purus dignissim
Etiam Cras in eget, Sed pellentesque, [removed_email] eu amet,
Mauris magna euismod, odio semper lorem, potenti. dui tellus.
[removed_email] Ut ipsum mi non Suspendisse tempus cursus ac nec [removed_email] semper. ac, quis suscipit posuere,
posuere Suspendisse Donec tristique a sagittis vel vitae urna Aliquam vehicula sit condimentum. mi risus mollis rutrum varius. nec elit.
nulla Fusce [removed_email] sagittis dictum nunc, eget in [removed_email] venenatis consectetur ultricies. interdum fermentum.
ante [removed_email] eros quam. nec [removed_email] blandit. massa. molestie ac, [removed_email] purus, ligula fringilla
imperdiet lorem neque. et blandit tortor. enim sed, magna.

Вывод:

[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]
[removed_email]

РЕДАКТИРОВАТЬ:

Если вы хотите его в виде массива:

String[] array=hs.toArray(new String[hs.size()]);

licensed under cc by-sa 3.0 with attribution.