いくつかのパスでこれらの値を抽出する方法を次に示します。
public static void main(String[] args) {
String eqn = "30.14x^2 + 55.69x + 60.1 = 100";
String numberRegex = "[\\d]+(?:[\\.]{1}[\\d]+)?";
String symbolsRegex = "=+-/\\\\*\\^";
String coefRegex = "("+numberRegex+")([a-z]{1})";
Pattern p = Pattern.compile(coefRegex);
Matcher m = p.matcher(eqn);
while (m.find()) {
System.out.println("coefficient: " + m.group(1) + " -- " + m.group(2));
}
String constRegexp = "([^ " + symbolsRegex + "]" + numberRegex + "(?:[ ]{1}|$))";
p = Pattern.compile(constRegexp);
m = p.matcher(eqn);
while (m.find()) {
System.out.println("constant: " + m.group(1));
}
}
出力:
coefficient: 30.14 -- x
coefficient: 55.69 -- x
constant: 60.1
constant: 100
上記で使用した正規表現のリテラル値を追加するだけです。
String coefRegex = "([\\d]+(?:[\\.]{1}[\\d]+)?)([a-z]{1})";
String constRegexp = "([^ =+-/\\\\*\\^][\\d]+(?:[\\.]{1}[\\d]+)?(?:[ ]{1}|$))";