问题描述
我正在学习java.i正在尝试使用regex查找段落中存在的所有唯一电子邮件地址。我的代码正在逐行读取所有输入内容,但最后一行除外。我一直在尝试找出什么问题是但是我不能。我给整数K表示段落中的行数。我给k行数作为输入,我的代码从中找到所有唯一的电子邮件地址。找到所有唯一的电子邮件地址后它们放在araryList中,然后对输出进行排序和打印。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
int k;
String result = "";
Scanner scan = new Scanner(system.in);
k = scan.nextInt(); //number of lines in a paragraph
System.out.println("");
scan.nextLine();
ArrayList<String> li = new ArrayList<String>();
Pattern pat = Pattern.compile("\\b[a-zA-Z0-9_.]+\\@[a-z.]+[a-z]+\\b"); //regex to find the email addresses
for(int iter = 1;iter <=k ; iter++){
System.out.println("value of iter is "+iter);
String getline = scan.nextLine(); //reads input lines
System.out.println(getline);
Matcher match = pat.matcher(getline);
while(match.find()){
String email = match.group(0);
if(!li.contains(email)){ //if list does not contain the email it adds them
System.out.println(email);
li.add(email);
}
}
}
Collections.sort(li);
for(String email: li){
result += email+";"; //removing the semi colon present at the end
}
System.out.println(li.size());
result = result.substring(0,result.length());
System.out.println(result);
}
}
输入
14
给编辑的信(必须提供完整的通讯地址):
[email protected]
读者编辑:
[email protected]
广告查询(打印):
[email protected]
广告查询(在线):
[email protected]
广告查询(国际):
[email protected]
订阅查询:
[email protected]
网站评论:
[email protected]
我的输出
iter的值为1
给编辑的信(必须提供完整的通讯地址):
iter的值是2
[email protected]
iter的值是3
读者编辑:
iter的值是4
[email protected]
iter的值是5
广告查询(打印):
iter的值是6
[email protected]
iter的值是7
广告查询(在线):
iter的值是8
[email protected]
iter的值是9
广告查询(国际):
iter的值是10
[email protected]
iter的值是11
订阅查询:
iter的值是12
[email protected]
iter的值是13
网站评论:
iter的值为14
它读取直到第13行,并等待第14次输入,但是根据我的假设,它应该像以前的行一样从控制台本身读取第14行(例如对于第一iter读取第一行,对于迭代2则读取第二行)第3行读取第3行,依此类推)。为什么它不读取第14行。这很令人困惑。我在哪里错过了逻辑,请简要说明一下,因为我是Java的新手。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)