我想提取一个电子邮件地址,该地址使用该格式的连字符进行模糊处理:f-o-o-@-e-x-a-m-p-l-e-.-c-o-m
到目前为止我所做的是:
String email = "f-o-o-@-e-x-a-m-p-l-e-.-c-o-m";
Pattern p = Pattern.compile("((\\w-)+)@-((\\w-)+)\\.-((\\w-){1,}\\w{1,6})");
Matcher m = p.matcher(email);
while (m.find()) {
email = email.replace("-", "");
}
System.out.println(email);
但我想知道,如果电子邮件已经有一个连字符“ - ”,例如:foo-with-hyphen@example.com
或foo@example-hyphen.com
,如果theos邮件以上述方式进行模糊处理,我的代码将无效。我怎么能解决这个问题?
答案 0 :(得分:3)
听起来像你想要的是:
String email = "f-o-o-@-e-x-a-m-p-l-e-.-c-o-m";
email = email.replaceAll("(.)-", "$1");
System.out.println(email);
.
模式匹配任何字符,而\w
仅匹配数字和字母。
答案 1 :(得分:2)
在我看来,你可以删除所有其他连字符,这应该没问题?我的意思是删除字符串中奇数索引处的连字符。
我假设连字符在两边都用连字符填充,因此原始的连字符不会丢失,如果不是这样的话,如果它们没有以相同的格式保存,它将不起作用,即“e-- -x --- a --- m --- p --- l ...“其中实际字符串是”exampl -...“
答案 2 :(得分:0)
尝试类似这样的例子
string email = "e-x-a-m-p-l-e-@-e-x-a-m-p-l-e---p-l-a-c-e-.-o-r-g";
string accum = "";
int index = 0;
int count = email.Count;
while (index < count)
{
accum += email[index];
index++;
if (index < count)
{
if(email[index] != '-')
{
NOT_A_HYPHEN_ERROR;
}
}
index++;
}
就像耶稣拉莫斯的解决方案一样,但警告你,如果你输入的字符串格式不正确。