Как мне отделить имена в начале массива? - PullRequest
0 голосов
/ 25 сентября 2019

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

Я пытался использовать комбинацию операторов if / else, и мне нужно использовать цикл for для просмотра всей информации.

Это то, что мне дано

String[] TheNeededData = new String[]{"Alexa Pope/P.O. Box 435 5461                    Euismod Avenue1-182-963-3500 blandit.congue@utcursus.co.uk",
"Kylynn Allen/8402 Justo St.1-357-430-1865morbi.tristique@lectus.org","Moana Cannon 522-1918 Quisque Rd.    1-752-893-8123  enim.mi@idsapienCras.edu"};

Это то, что я пробовал

    int count;
public TheData(String TheString)
{


    int x = TheString.length();

    for(int y = 0; y<x; y++)
    {
        String z = String.valueOf(TheString.charAt(y));
        if(z.equals("/"))
            System.out.println(TheString.substring(0,y));
        else
        {
            if(count == 1)
                if(z.equals(" "))
                {
              System.out.println(TheString.substring(0,y));
              count++;
            }
            if(count == 0)
                if(z.equals(" "))
                {
                    count ++;
                }

        }
    }    
}

Это был вывод

Alexa Pope
Alexa Pope/P.O.
Kylynn Allen
Kylynn Allen/8402
Moana Cannon    522-1918

Я ожидал, что первые несколько имен будут напечатаны с использованием подстроки кcharAt ("/"), затем я попытался найти фамилию, идентифицировав первые два пробела, но он напечатал больше, чем просто имена вместе с печатью имен более одного раза.

1 Ответ

0 голосов
/ 25 сентября 2019

Поскольку вы не знаете, что такое формат данных, я бы попытался перебрать некоторые или все записи и настроить шаблоны в процессе.

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.util.regex.Pattern.CASE_INSENSITIVE;
import static java.util.stream.Collectors.toList;

public class Main {

    private static final Pattern NAME_REGEX =
            Pattern.compile("^([A-Z]+ [A-Z]+ ).*$", CASE_INSENSITIVE);

    private static final Pattern EMAIL_ADDRESS_REGEX =
            Pattern.compile("^.* ([A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}).*$", CASE_INSENSITIVE);

    private static final Pattern PHONE_NUMBER_REGEX =
        Pattern.compile("^.*(\\d-\\d{3}-\\d{3}-\\d{4}).*$", CASE_INSENSITIVE);

    public static void main(String[] args) {
        var data = new String[]{
                "Alexa Pope/P.O. Box 435 5461                    Euismod Avenue1-182-963-3500 blandit.congue@utcursus.co.uk",
                "Kylynn Allen/8402 Justo St.1-357-430-1865morbi.tristique@lectus.org",
                "Moana Cannon 522-1918 Quisque Rd.    1-752-893-8123  enim.mi@idsapienCras.edu"};

        for (var entry : cleanUpData(data)) {
            System.out.println("\n" + entry);

            var name = findMatch(entry, NAME_REGEX).orElse("");
            var phoneNumber = findMatch(entry, PHONE_NUMBER_REGEX).orElse("");
            entry = entry.replace(phoneNumber, " ");
            var emailAddress = findMatch(entry, EMAIL_ADDRESS_REGEX).orElse("");
            System.out.println("Name: " + name);
            System.out.println("Email: " + emailAddress);
            System.out.println("Phone: " + phoneNumber);
        }
    }

    private static List<String> cleanUpData(String[] data) {
        return Arrays.stream(data).map(s -> s
                .replace("/", " ")
                .trim()
                .replaceAll(" +", " ")
        ).collect(toList());
    }

    private static Optional<String> findMatch(String entry, Pattern pattern) {
        Matcher matcher = pattern.matcher(entry);
        if (!matcher.find()) {
            return Optional.empty();
        }
        try {
            return Optional.of(matcher.group(1));
        } catch (NumberFormatException e) {
            return Optional.empty();
        }
    }
}

Вывод:

Alexa Pope P.O. Box 435 5461 Euismod Avenue1-182-963-3500 blandit.congue@utcursus.co.uk
Name: Alexa Pope 
Email: blandit.congue@utcursus.co.uk
Phone: 1-182-963-3500

Kylynn Allen 8402 Justo St.1-357-430-1865morbi.tristique@lectus.org
Name: Kylynn Allen 
Email: morbi.tristique@lectus.org
Phone: 1-357-430-1865

Moana Cannon 522-1918 Quisque Rd. 1-752-893-8123 enim.mi@idsapienCras.edu
Name: Moana Cannon 
Email: enim.mi@idsapienCras.edu
Phone: 1-752-893-8123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...