Проверьте ввод с помощью регулярного выражения - PullRequest
0 голосов
/ 13 февраля 2020

Я работаю над пользовательским интерфейсом, и один ввод, который должен сделать пользователь, - это точка в формате

(<x-coordinate>,<y-coordinate>)

Я никогда раньше не работал с Regex, поэтому я не совсем уверен, как проверить ввод. Он не должен принимать это, если в начале нет круглых скобок или что-то еще, что не соответствует шаблону.

Так как я могу сохранить координаты x и y в целое число, удалив другие символы, а также проверив, имеет ли он требуемый шаблон?

Может кто-нибудь показать мне, как это делается?

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Предполагая, что ваши координаты являются целыми числами, вы можете сделать простое регулярное выражение, подобное этому:

^\((\d+?),(\d+?)\)$

Это даст вам три совпадающие группы. Первый для всего совпадения, второй для первой координаты, третий для второй координаты.

Вы можете решить это с помощью Java следующим образом:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Coords {

    public static void main(String[] args) {
        String input = "(123,456)";
        final Pattern pattern = Pattern.compile("^\\((\\d+?),(\\d+?)\\)$");
        final Matcher matcher = pattern.matcher(input);
        if (matcher.matches()) {
            int x = Integer.parseInt(matcher.group(1));
            int y = Integer.parseInt(matcher.group(2));

            System.out.println("X: " + x);
            System.out.println("Y: " + y);
        }
    }
}

Также: A Хорошая отправная точка, при испытании новых регулярных выражений, здесь: https://regex101.com/

EDIT Если входные данные также должны быть разбираемы, когда после пробела запятую, вы можете сделать это:

^\((\d+?),\s+(\d+?)\)$

В Java, обратные слеши должны быть экранированы соответственно.

0 голосов
/ 13 февраля 2020

Вы можете попробовать использовать шаблон регулярных выражений:

\(\d+,\d+\)

Пример сценария:

String input = "(123,456)";
if (input.matches("\\(\\d+,\\d+\\)")) {
    System.out.println("MATCH");
}

Если вы хотите извлечь два значения, вы можете использовать String#split:

String input = "(123,456)";
String[] coords = input.substring(1, input.length()-1).split(",");
System.out.println("x = " + coords[0]);
System.out.println("y = " + coords[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...