строка Java [] расщепление для идентификатора электронной почты - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть переменная temp:

String temp = "Ms Abc`<abc@gmail.com`>;Mr Cde`<cde@mail.com`>;Miss Xyz`<xyz@mail.com`>";

Теперь мне нужно разбить эту переменную temp строку на ArrayList или String[], чтобы я мог извлечь title, name, emailid для вставки в базу данных. Я могу только разделить идентификатор электронной почты, используя следующий код:

ArrayList emailIdList = new ArrayList();
Pattern p = Pattern.compile("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
while (m.find()){
     emailIdList.add(m.group()); 
}

Но у меня проблемы с получением названия и названия, поскольку я застрял в логике.

Как это можно сделать?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

Сначала разделите на ;, чтобы отделить каждую запись:

String[] entry = temp.split(";");

Для вашего примера entry будет содержать:

[0] => "Ms Abc`"
[1] => "Mr Cde`"
[2] => "Miss Xyz`"

Для одной записи, теперь мы хотим извлечь приветствие (я думаю, вы называете это title), имя и адрес электронной почты. Для этого вы можете использовать простое регулярное выражение:

Pattern p = Pattern.compile("(\\w+)\\s(\\w+)`<(.+)`>");

Затем просто переберите entry и прочитайте группы из регулярного выражения:

// for each of the entries
for(String e : entry){
    Matcher m = p.matcher(e);
    if(m.find()){
        String title = m.group(1);
        String name  = m.group(2);
        String email = m.group(3);
    }
}
1 голос
/ 10 ноября 2010

Я бы предложил использовать split несколько раз и сохранить значение в коллекции, как ArrayList.

    String temp = "Ms Abc`<abc@gmail.com`>;Mr Cde`<cde@mail.com`>;Miss Xyz`<xyz@mail.com`>";
     /* Initializing arralists */
    ArrayList<String> title = new ArrayList<String>();
    ArrayList<String> name = new ArrayList<String>();
    ArrayList<String> email = new ArrayList<String>();

    /* Splitting each record */
    String [] eachRecord = temp.split(";");
    for (int i = 0; i < eachRecord.length; i++) {

        /* Fetch value in each record */
        String [] intermediateValue = eachRecord[i].split(" ");
        title.add(intermediateValue[0]);
        intermediateValue = intermediateValue[1].split("`<");
        name.add(intermediateValue[0]);
        intermediateValue = intermediateValue[1].split("`>");
        email.add(intermediateValue[0]);
    }

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

...