Как извлечь полиномиальные коэффициенты в Java?

Взяв в качестве примера строку -2x^2+3x^1+6, как извлечь -2, 3 и 6 из этого уравнения, хранящегося в строке?


person Manish    schedule 16.11.2012    source источник
comment
Я попытался извлечь, используя + в качестве разделителя, чтобы извлечь -2x2 3x и 6 .. тогда что делать   -  person Manish    schedule 16.11.2012
comment
Как насчет запуска -2x^2 через извлечение с разделителем 'x'? (кстати, у вас есть планы, как справиться, например, с 3x^3-2x^2-3 ?   -  person Aki Suihkonen    schedule 16.11.2012


Ответы (2)


Не давая точного ответа, но некоторые намеки:

  • Используйте replace meyhod:

    заменить все - на +-.

  • Используйте метод split:

    // after replace effect
    String str = "+-2x^2+3x^1+6"
    String[] arr = str.split("+");
    // arr will contain: {-2x^2, 3x^1, 6}
    
  • Теперь каждое значение индекса можно разделить по отдельности:

    String str2 = arr[0];
    // str2 = -2x^2;
    // split with x and get vale at index 0
    
person Azodious    schedule 16.11.2012

    String polynomial= "-2x^2+3x^1+6";
    String[] parts = polynomial.split("x\\^\\d+\\+?");
    for (String part : parts) {
        System.out.println(part);
    }

Это должно работать. Пример вывода

polynomial= "-2x^2+3x^1+6"
Output:
-2
3
6 
polynomial = "-30x^6+20x^3+3"
Output:
-30
20
3
person MoveFast    schedule 16.11.2012
comment
Спасибо, Маной, но это не сработает в условии, если - знак приходит пример -2x^2-3x^1+6 - person Manish; 16.11.2012
comment
@Manish сделал небольшое изменение. Это должно работать для этого случая сейчас. Я сделал совпадение со знаком + необязательным. Таким образом, отрицательные номера также будут сопоставлены. - person MoveFast; 16.11.2012
comment
Мне было интересно, что если последовательность будет введена как 6+3x^1-2x^2... в этом случае шаблон соответствия изменится... - person Manish; 17.11.2012
comment
@Manish ya .. тогда шаблон изменится .. если это так, я думаю, что лучший подход - сначала разделить на основе знака +/-, а затем извлечь цифру из разделенной части - person MoveFast; 18.11.2012