[java] parsowanie wielomianu

spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

[java] parsowanie wielomianu

Post autor: spajder »

Mam do napisania prosty parser wielomianu, tj. ze Stringa wyglądającego mniej wiecej tak:

Kod: Zaznacz cały

4.3x^{7}+9x^{5}-3x^{3}-2.1x+2.7
mam zrobić wielomian (klasę wielomianu napisałem - kwestia tylko w odczycie współczynników). Pierwsza myśl to użycie StringTokenizer, wtedy dzieli mi na tokeny:

Kod: Zaznacz cały

4.3x^{7}
9x^{5}
3x^{3}
2.1x
27
czyli niestety traci informacje o znaku (ponieważ jako delimiter ustawiłem znak "+" lub "-"); Czy mam ktoś pomysł jak to ominąć? Tylko tak, żeby nie trzeba było rzeźbić w całym Stringu
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

[java] parsowanie wielomianu

Post autor: smiechowiec »

Kod: Zaznacz cały

    String sv = "4.3x^{7}+9x^{5}-3x^{3}-2.1x+2.7";
    sv = sv.replace(" ", " ");
    sv = sv.replace("+", " +");
    sv = sv.replace("-", " -");
    String tsv[] = sv.split(" ");
    int ilen = tsv.length;
    Double twsp[] = new Double[ilen] ; //tablica współczynników
    int tpot[] = new int[ilen] ; //tablica potęg
    String s2[] = null;
    for (int i = 0; i < tsv.length; i++) {
      s2 = tsv[i].replace("x", "x ").split("x");
      twsp[i] = new Double(s2[0]);
      if (s2.length > 1) {
        if ( s2[1].equals(" ") )
          tpot[i] = 1;
        else
          tpot[i] = new Integer( s2[1].replace("{", "").replace("}", "").replace("^", "").trim() );
      } else
        tpot[i] = 0;
    }
    for (int i = 0; i < tsv.length; i++)
      System.out.println(twsp[i] + " ^ " + tpot[i]);
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

[java] parsowanie wielomianu

Post autor: spajder »

dzięki, świetny pomysł
nie wpadłbym na to, żeby przed każdym znakiem liczby wstawić spację... naprawdę super
ODPOWIEDZ