我在Stack中看到了类似的问题,但这是C语言中的文件。 情况: 我有一个ArrayList of Strings,该元素是一封电子邮件。例如:
jony@test.com
jony1@test.com
gerd@test.com
等
我想编写一个函数/方法,该函数/方法将向该列表添加新电子邮件,并附带一个非常重要的要点!:
例如,如果我想添加“ jony@test.com”,则该方法应通过 ArrayList,如果“ jony@test.com”已经存在,则检查“ jony1@test.com”是否存在等,直到找到空闲数字后缀,然后添加它。在我们的示例中,应该添加“ jony2 @ test”。 com”。
问题是我想要一些简短而优雅的解决方案,我写的是 用3种方法等的丑陋的150行代码,看起来还不行。 是否拥有精巧的算法或高级Collection的专长来实现这一目标?
谢谢
答案 0 :(得分:1)
您可以在添加之前检查列表,如下所示:
public void addWithSuffix(String email) {
if(list.contains(email)) {
int number = 0;
String[] tmp = email.split("@");
for(; list.contains(tmp[0] + number + "@" + tmp[1]); number++){}
list.add((tmp[0] + number + "@" + tmp[1]));
}
else {
list.add(email);
}
}
但是,当然,在尝试添加电子邮件之前,请先验证您的输入以确保电子邮件有效。而且我还建议将List
换成Set
答案 1 :(得分:1)
创建自定义添加方法并使用拆分值,并检查直到计数达到最大值,
def builder = new NullObject()
答案 2 :(得分:0)
尝试一下:
import java.io.*;
import java.util.*;
public class DynamicMail{
private Map<String, Integer> map = new HashMap<>();
private List<String> emails = new ArrayList<>();
public static void main(String args[]){
DynamicMail dm = new DynamicMail();
dm.addToList("jony@test.com");
dm.addToList("gary@test.com");
dm.addToList("jony@test.com");
dm.addToList("jony@test.com");
dm.addToList("jony@test.com");
dm.addToList("gary@test.com");
dm.addToList("ghost@test.com");
System.out.println(dm.getEmails());
}
public Map<String, Integer> getMap(){
return map;
}
public List<String> getEmails(){
return emails;
}
public void addToList(String email){
String[] parts = email.split("@");
Integer i = map.computeIfAbsent(parts[0], x->new Integer(0));
if(i!=0)
emails.add(parts[0]+i+"@"+parts[1]);
else
emails.add(email);
map.put(parts[0], ++i);
}
}
如果您从一个空列表开始,并且像jony1@test.com或gerd2@test.com这样的电子邮件将不作为输入,这将起作用。
答案 3 :(得分:0)
尝试
主班
List <String> list=new ArrayList<String>();
list.add("jony@test.com");
list.add("jony1@test.com");
list.add("jony2@test.com");
list.add("jony3@test.com");
list.add("gerd@test.com");
String newEmail = "jony@test.com";
String last = "";
for (String string : list) {
if(compareString(newEmail , string)){
last = string;
}
}
int newNumber = Integer.valueOf(last.substring(last.indexOf("@")-1, last.indexOf("@")))+1;
String[] s = newEmail.split("@");
list.add(s[0]+ newNumber + s[1]);
System.out.println(list);
替换数字后比较字符串
private static boolean compareString(String string, String string2) {
string2 = string2.replaceAll("\\d","");
return string.equals(string2);
}