Попробуйте использовать регулярное выражение , например:
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 использовал круглые скобки, чтобы отметить нашу поисковую группу, в нашем случае это только цифры