Как определить, содержит ли строка одну группу цифр в конце - PullRequest
0 голосов
/ 02 ноября 2018

В настоящее время я борюсь с проблемой нормализации адреса. В начале ul = street. В моей стране в большинстве случаев встречаются улицы с форматом "ul. Marii Skłodowskiej-Curie" без номера в конце улицы, но в конкретной ситуации встречаются улицы типа "ul. Dywizjonu 303", где 303 не является номером дома.

У меня есть адресный словарь, в котором мне нужно проверить, существует ли улица. Первый пример довольно легко проверить, потому что я удаляю все цифры из конца строки и сравниваю результирующую строку со словарем, но с другой стороны, во втором примере, если я удалю все цифры из конца строки, я получу «ul. Dywizjonu» без 303, который нормально интегрирован с улицей.

У меня вопрос: возможно ли избавиться от лишних цифр и символов в конце строки и получить последнюю пару или одну цифру из строки:

Например:

"ul. Warszawska 150 12/45" -> отдельный результат 150 и ul. Варшавская

"ul. Warszawska 17/19" -> отдельный результат 17 и ul. Варшавская

"ul. Lipca 80r. 90" -> отдельный результат 90 и ul. Липка 80р.

"ul. Warszawska 14 10/120 / 2b" -> отдельный результат 14 и ul. Варшавская

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

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 02 ноября 2018
  1. Разделить на " " пробел.
  2. Проверьте, имеют ли последние две записи цифры.

    а. Оба имеют цифры: проверьте последнюю запись для / косой черты.

    i. has slash: rebuild the string without the last entry.<br>
    ii. don't have slash: rebuild the complete string.<br>
    

    б. Последняя запись имеет цифру (ы): разделить на / и восстановить строку без второй записи разделения на /.

Код

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 *
 * @author blj0011
 */
public class JavaApplication91
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        // TODO code application logic here
        List<String> results = new ArrayList();

        String data = "ul. Warszawska 150 12/45\n"
                + "ul. Warszawska 17/19\n"
                + "ul. Lipca 80r. 90\n"
                + "ul. Warszawska 14 10/120/2b";

        List<String> lines = new ArrayList(Arrays.asList(data.split("\n")));

        for (String line : lines) {
            String[] splitLine = line.split(" ");
            if (containsDigit(splitLine[splitLine.length - 1]) && containsDigit(splitLine[splitLine.length - 2])) {
                if (!splitLine[splitLine.length - 1].contains("/")) {
                    StringBuilder stringBuilder = new StringBuilder();

                    for (int i = 0; i < splitLine.length; i++) {
                        stringBuilder.append(splitLine[i]).append(" ");
                    }

                    results.add(stringBuilder.toString().trim());
                }
                else {
                    StringBuilder stringBuilder = new StringBuilder();

                    for (int i = 0; i < splitLine.length - 1; i++) {
                        stringBuilder.append(splitLine[i]).append(" ");
                    }

                    results.add(stringBuilder.toString().trim());
                }
            }
            else if (containsDigit(splitLine[splitLine.length - 1])) {
                String[] splitNumber = splitLine[splitLine.length - 1].split("/");

                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < splitLine.length - 1; i++) {
                    stringBuilder.append(splitLine[i]).append(" ");
                }
                stringBuilder.append(splitNumber[0]);

                results.add(stringBuilder.toString());
            }
            else {
                //handle other cases
            }
        }

        results.forEach(System.out::println);

    }

    static boolean containsDigit(String string)
    {
        return string.matches(".*\\d+.*");
    }
}

Результаты

ul. Warszawska 150
ul. Warszawska 17
ul. Lipca 80r. 90
ul. Warszawska 14
BUILD SUCCESSFUL (total time: 0 seconds)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...