Получение полиномиальных показателей в java

Я пытаюсь получить показатели полинома в java.

Я нашел нечто подобное здесь Как извлечь полиномиальные коэффициенты в java? но Кажется, я не могу изменить это для своих нужд, аргумент метода .split().

Я пробовал это:

public static void main(String[] args) { 


Scanner scanner = new Scanner(System.in);
String s1 = new String();
System.out.println("Enter a polynome:");
s1 = scanner.nextLine();
    scanner.close();

String[] Exponents = s1.split("\\-?\\+?\\dx\\^");
for (String exponent : Exponents) {
    System.out.println("Exponents:");
    System.out.println(exponent);
    }

для ввода: -2x^2+3x^1+6 вывод:

Показатели:

Показатели: 2

Показатели: 1+6

Спасибо за помощь,


person staynless    schedule 10.03.2014    source источник
comment
Можете ли вы показать многочлен, коэффициенты которого вы пытаетесь извлечь? Примеры обычно помогают. Так же как и показ любых попыток, которые вы предприняли.   -  person Floris    schedule 11.03.2014
comment
.split — это тупой инструмент, который может быть недостаточно хорош для этого использования. Попробуйте регулярные выражения.   -  person ajb    schedule 11.03.2014
comment
Или логика рукописного ввода сканирует строку в поисках ^ и сразу же извлекает число. Или, излишним для вашей текущей проблемы, реализовать анализатор выражений рекурсивного спуска, который сможет обрабатывать такие вещи, как x ^ (y + 2)...   -  person keshlam    schedule 11.03.2014


Ответы (1)


Вы, вероятно, хотите разделить на + и -, чтобы получить отдельные термины. Затем для каждого термина снова используйте split, чтобы вернуть все, что идет после ^, или 0, если ^ нет.

String[] terms = expression.split("(-|\\+)");
for (String term : terms) {
    String[] parts = term.split("\\^");
    System.out.println("Exponent: " + (parts.length > 1 ? parts[1] : "0"));
}
person Dawood ibn Kareem    schedule 10.03.2014
comment
Я никогда не думал об этом как о двухуровневом сплите. Спасибо за помощь! - person staynless; 11.03.2014
comment
В случае, если первый моном не имеет знака, используйте (-|\\+), иначе используйте (\\+-?). - person staynless; 11.03.2014
comment
@Floris, зачем мне нужна настройка? Использование split таким образом, как я, не требует, чтобы первый коэффициент имел знак. - person Dawood ibn Kareem; 11.03.2014