может иметь дело с первой строкой, когда я использую регулярное выражение для полиномов - PullRequest
0 голосов
/ 15 апреля 2019

вот мой код

String a = "X^5+2X^2+3X^3+4X^4";
String exp[]=a.split("(|\\+\\d)[xX]\\^");
for(int i=0;i<exp.length;i++) {
    System.out.println("exp: "+exp[i]+" ");
}

я пытаюсь найти вывод 5,2,3,4, но вместо этого я получил ответ

exp:
exp:5
exp:2
exp:3
exp:4

я не знаю гдеэто пробел в первой строке, и я не могу найти желание избавиться от этого, я пытаюсь использовать другие регулярные выражения для этого, а также использовать компиляцию, все еще могу избавиться от первой строки, я пытаюсь использовать новую строку "X+ X ^ 5 + 2X ^ 2 + 3X ^ 3 + 4X ^ 4 "; первая строка показывает exp: X.и я также использую онлайн-компилятор регулярных выражений, чтобы попытаться решить мою проблему, но ответ - 5,2,3,4, купите eclipse, оставьте пробел, а затем 5,2,3,4, нужна помощь, чтобы выяснить это

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

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

    String input = "X^5+2X^2+3X^3+4X^4";

    Pattern pattern = Pattern.compile("\\^([0-9]+)");
    Matcher matcher = pattern.matcher(input);

    for (int i = 1; matcher.find(); i++) {
        System.out.println("exp: " + matcher.group(1));
    }

Дает вывод:

exp: 5
exp: 2
exp: 3
exp: 4

Как это работает: Использованный шаблон: \ ^ ([0-9] +) Соответствует любым строкам, начинающимся с ^, за которыми следуют 1 или более цифр (обратите внимание на знак +). Тире (^) имеет префикс обратного слеша (\), потому что он имеет особое значение в регулярных выражениях - начало строки - но в вашем случае вам просто нужно точное совпадение ^ символа.

Мы хотим обернуть наши совпадения в группы, чтобы обращаться к ним поздно во время процесса сопоставления. Это означает, что мы должны пометить их, используя скобки ( и ).

Затем мы хотим перенести наш шаблон в Java String. В литерале String символ \ имеет особое значение - он используется в качестве управляющего символа, например, "\n" представляет новую строку. Это означает, что если мы поместим наш шаблон в String литерал, нам нужно экранировать \, чтобы наш шаблон стал: "\\^([0-9]+)". Примечание двойное \.

Далее мы перебираем все совпадения, получая группу 1, которая соответствует нашему номеру. Обратите внимание, что символ ^. Не учитывается в нашем совпадении, даже если он является частью нашего шаблона. Это так, потому что wr использовал круглые скобки, чтобы отметить нашу поисковую группу, в нашем случае это только цифры

0 голосов
/ 15 апреля 2019

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

...