Извлечение запутанного письма с дефисами в Java - PullRequest
0 голосов
/ 19 марта 2012

Я хотел бы извлечь адрес электронной почты, который обфусцирован дефисами в этой форме: 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, если те же письма запутаны таким же образом, как выше, мой код не будет работать.Как я мог решить это?

Ответы [ 3 ]

3 голосов
/ 20 марта 2012

Похоже, что вы хотите, это:

String email = "f-o-o-@-e-x-a-m-p-l-e-.-c-o-m";
email = email.replaceAll("(.)-", "$1");
System.out.println(email);

Шаблон . соответствует любому символу, а \w - только цифрам и буквам.

2 голосов
/ 19 марта 2012

Мне кажется, что вы можете просто удалить все другие дефисы, и это должно быть хорошо? Под этим я подразумеваю удалить дефисы в нечетных индексах в строке.

Я сделал предположение, что дефисы дополняются дефисом с обеих сторон, поэтому оригинальный дефис не теряется, если это не так, он не будет работать, если они не сохранены в одном и том же форматировании, т. Е. "E-- -x --- a --- m --- p --- l ... ", где фактическая строка" exampl -... "

0 голосов
/ 20 марта 2012

попробуйте пример, подобный этому

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++;
}

Как и решение Иисуса Рамоса, но предупреждает вас, если введенная вами строка имеет неправильный формат.

...