Используйте Regex, следующий шаблон будет работать:
([+-]?\d+)[Xx]2\s*([+-]?\d+)[Xx]\s*([+-]?\d+)\s*=\s*0
Это будет соответствовать квадратное и извлеките параметры, давайте выясним, как это работает:
(...)
это захват группы
[+-]?\d+
это соответствует количеству цифр, которому предшествует, необязательно с помощью +
или -
[Xx]
это соответствует «X» или «х»
\s*
это соответствует нулю или более пробелов
Так
([+-]?\d+)
соответствует «A» аргумент
[Xx]2
матчи «X2» или «x2»
\s*
спички необязательные пробелы
([+-]?\d+)
совпадает с «Ъ» аргумент
[Xx]
матчи «Х» или «х»
\s*
матчи необязательно пробельные
([+-]?\d+)
совпадает «с» аргумент
\s*=\s*0
матчи "= 0" с некоторыми дополнительными пространствами
Позволяет обернуть это в 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();
}
}
Примечание к \\
, это требуется Java.
Быстрый тест:
System.out.println(QuadraticEq.parseString("4x2-4x-42=0"));
Выход:
QuadraticEq{a=4, b=-4, c=-42}
Таким образом, вход всегда имеет формат '+/- aX2 +/- bX +/- c'? Звучит как работа для ... regex. –
есть. всегда в этом формате –
Вам нужны только коэффициенты? Если вы намереваетесь позже получить экспонентов, я бы рекомендовал создать небольшой парсер для ваших выражений. – Turing85