Usa Regex, il seguente schema funziona:
([+-]?\d+)[Xx]2\s*([+-]?\d+)[Xx]\s*([+-]?\d+)\s*=\s*0
Ciò corrisponderà al quadratica e estrai i parametri, lascia che funzioni come funziona:
(...)
questo è catturare gruppo
[+-]?\d+
questo corrisponde a un numero di cifre, preceduta eventualmente da un +
o -
[Xx]
questo corrisponde a "X" o "x"
\s*
questo corrisponde a zero o più spazi
Così
([+-]?\d+)
corrisponde la "a" argomento
[Xx]2
partite "X2" o "x2"
\s*
partite spazi
([+-]?\d+)
opzionale corrisponde al "b" argomento
[Xx]
partite "X" o "x"
\s*
partite spazi bianchi
([+-]?\d+)
opzionale partite l'argomento "c"
\s*=\s*0
partite "= 0" con alcuni spazi opzionali
Consente avvolgere questo in un class
:
private static final class QuadraticEq {
private static final Pattern EQN = Pattern.compile("([+-]?\\d+)[Xx]2\\s*([+-]?\\d+)[Xx]\\s*([+-]?\\d+)\\s*=\\s*0");
private final int a;
private final int b;
private final int c;
private QuadraticEq(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
public static QuadraticEq parseString(final String eq) {
final Matcher matcher = EQN.matcher(eq);
if (!matcher.matches()) {
throw new IllegalArgumentException("Not a valid pattern " + eq);
}
final int a = Integer.parseInt(matcher.group(1));
final int b = Integer.parseInt(matcher.group(2));
final int c = Integer.parseInt(matcher.group(3));
return new QuadraticEq(a, b, c);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("QuadraticEq{");
sb.append("a=").append(a);
sb.append(", b=").append(b);
sb.append(", c=").append(c);
sb.append('}');
return sb.toString();
}
}
nota la \\
, questo è richiesto da Java.
Un test rapido:
System.out.println(QuadraticEq.parseString("4x2-4x-42=0"));
uscita:
QuadraticEq{a=4, b=-4, c=-42}
fonte
2015-04-18 17:10:43
Quindi l'input è sempre nel formato '+/- aX2 +/- bX +/- c'? Sembra un lavoro per ... regex. –
sì. sempre in quel formato –
Hai solo bisogno dei coefficienti? Se hai intenzione di ottenere anche gli esponenti più avanti, ti consiglio di creare un parser piccolo per le tue espressioni. – Turing85