Найдите, что если минус присутствует в начале числа, которое считается отрицательным - PullRequest
1 голос
/ 09 июня 2019

Я делаю валидатор ... Он получит строку и проверит ее. Я хочу сделать так, что если минус находится в начале числа, это будет считаться истиной. Как (-34 + 56) и (23 * -43) будет в порядке, но (23 + * 23-) будет не в порядке .. . На самом деле это для калькулятора, поэтому это должно быть правильное уравнение

Я попытался добавить строку, которая соответствовала бы - но это не работало и не было разумно.

Это мой метод проверки

 public boolean validateInput(String input) {
        if(input.contains(".")) {
            return true;
        }

        Pattern pattern = Pattern.compile("[-]");
        Matcher matcher = pattern.matcher(input);
        if (matcher.find()) {
            return true;
        }

        if((input.replaceAll("[^(]","" ).length() != input.replaceAll("[^)]", "").length()) || input.split("[^\\d]").length == 0 || input.length() == 0)
            return false;

//           [\d|-][(|)]   [\d|)][(|\d]|[^\d|(][)|^\d]
//        [\d][(]|[)][\d]|[^\d][)]|[(][^\d]

//        String ope = "*\\/+^-";
        //to check input like 9(, )9, *),(*..
        pattern = Pattern.compile("(\\d\\()|(\\)\\d)|(\\([*\\/+^])|([*\\/+^]\\))");
        matcher = pattern.matcher(input);
        if (matcher.find()) {
            return false;
        }

        //
        pattern = pattern.compile("[^\\d|+*^()\\/]");
        matcher = pattern.matcher(input);
        if (matcher.find()) {
            return false;
        }


        //to check if 2 consecutive operators are there...
        pattern = pattern.compile("[*-+^\\/]{2}");
        matcher = pattern.matcher(input);
        if (matcher.find()) {
            return false;
        }



        return true;
    }

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

Ответы [ 2 ]

4 голосов
/ 09 июня 2019

Вы подходите к этому неправильно.

Вам нужен парсер , который понимает числовые выражения. И регулярные выражения здесь не годятся. И даже если бы это было так: посмотрите на регулярное выражение, которое вы уже выставили. Как вы думаете, вы поймете, что через 2 месяца, черт через 2 недели?

Таким образом, real ответ здесь: забудьте о регулярных выражениях. Узнайте, как разобрать таких строк. Вы можете начать с ответов, приведенных здесь для руководства.

0 голосов
/ 09 июня 2019

Прошу прощения, если я что-то упустил в вашем вопросе, но если строка представляет собой комбинацию чисел и операторов, почему бы просто не проверить, заканчивается ли она цифрой?

Вы можете использовать регулярное выражение, например, "/ ^ [0-9]" (не проверено).

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