Параметры строки Java первый / последний параметр - PullRequest
0 голосов
/ 04 ноября 2018

Я только учусь и не могу найти решение для следующей задачи:

Это задача:

Напишите функцию, которая получает задачу, переданную в качестве строкового параметра. Мы ограничиваемся поиском в тексте. Каждая задача структурирована следующим образом:

 <TASK> <WHAT> <TEXT>

Вы должны быть в состоянии найти первое и последнее слово или букву:

 <TASK> = "FIND (FIRST | LAST) (CHAR | WORD)"

Выходными данными всегда должно быть место, где начинается поиск, иначе -1. ​​

Примеры:

 "FIND FIRST CHAR D This is a text" → Output: "0"
 "FIND FIRST CHAR a This is a text" → Output: "-1"
 "FIND FIRST CHAR s This is a text" → Output: "3"
 "FIND LAST CHAR t This is a text" → Output: "16"
 "FIND FIRST WORD is This is a text" → Edition: "5"
 "FIND LAST WORD is This is a text" → Output: "5"

Подсказка

  • Если вы нажмете Run, вы увидите вывод консоли всех System.out.println

1 Ответ

0 голосов
/ 04 ноября 2018
private static final Pattern PATTERN = Pattern.compile("FIND\\s+(?<pos>FIRST|LAST)\\s+(?<unit>CHAR|WORD)\\s+(?<what>\\S+)\\s+(?<text>.+)");

public static int find(String str) {
    Matcher matcher = PATTERN.matcher(str);

    if (!matcher.matches())
        return -1;

    String pos = matcher.group("pos");
    String unit = matcher.group("unit");
    String what = matcher.group("what");
    String text = matcher.group("text");
    boolean first = "FIRST".equals(pos);

    if ("CHAR".equals(unit))
        return first ? text.indexOf(what) : text.lastIndexOf(what);

    if ("WORD".equals(unit)) {
        Matcher match = Pattern.compile("\\b" + what + "\\b").matcher(text);
        int offs = -1;

        while (match.find()) {
            offs = match.start();

            if (first)
                break;
        }

        return offs;
    }

    return -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...