Как проверить, имеет ли строка формат ггггггггг - PullRequest
1 голос
/ 25 февраля 2020

У меня есть ArrayList, как показано ниже:

dates : [
"1981-1990",
"1971-1980",
"1991-2000"
]

Я хотел бы выполнить проверку: посмотреть, являются ли значения в списке диапазонами года или нет.

EDITED : Иногда я получаю правильный формат дат, например, 'yyyy-MM-dd', а иногда и диапазон года. Я просто хочу, чтобы моя функция работала в обоих условиях. Это должно идентифицировать это как дату, если дата присутствует или диапазон года. Это все

Ответы [ 2 ]

5 голосов
/ 25 февраля 2020

Вы можете использовать Год с Год :: isBefore с java -time API, как Итак:

String[] ranges = {"1981-1990", "1971-1980", "1991-2000"};
for (String range : ranges) {
    String[] dates = range.split("-");
    if (Year.parse(dates[0]).isBefore(Year.parse(dates[1]))) {
        System.out.println("Correct range");
    } else {
        System.out.println("Wrong range");
    }
}

После вашего редактирования я бы go с этим решением здесь:

String[] dates = {"1981-1990", "2020-02-25", "1971-1980", "1998-02-25", "1991-2000"};
for (String date : dates) {
    if (date.matches("\\d{4}-\\d{4}")) {
        String[] split = date.split("-");

        if (Year.parse(split[0]).isBefore(Year.parse(split[1]))) {
            System.out.println("Correct range");
        } else {
            System.out.println("Wrong range");
        }
    } else {
        try {
            LocalDate.parse(date);
            System.out.println("Correct date");
        } catch (DateTimeParseException ex) {
            System.out.println("Wrong date");
        }
    }
}
0 голосов
/ 25 февраля 2020

Ваш ArrayList имеет String элементов, поэтому вам нужно вызвать метод .split () для каждого из них, пока вы зацикливаете свой ArrayList. Метод split возвращает массив строк, поэтому в результирующем массиве вы проверяете длину. Если длина 2, то у вас есть два года. Если длина 5, у вас есть две полные даты. Если длина равна 4, то одним из значений является полная дата, а другим - год. Итак,

for (int index = 0; index < myArrayList.size(); index++) {
    String[] items = myArrayList.get(index).split();
    if (items.length == 2) {/*Two years*/}
    else if (items.length == 5) {/*Two full dates*/}
    else if (items.length == 4) {
        if (items[1].length() == 4) {/*The first is a year, the second a full date*/}
        else {/*The first is a full date, the second is a year*/}
    }
}
...