- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class PolynomialParser {
public Polynomial parse(String rawPolynomial) {
String source = normalizeSourceString(rawPolynomial);
Map<Integer, Integer> result = new HashMap<>();
StringTokenizer tokenizer = new StringTokenizer(source, "[+-]", true);
boolean isCurrentNegative = false;
int currentDegree;
int currentCoefficient;
while (tokenizer.hasMoreTokens()) {
String currentToken = tokenizer.nextToken();
if ("-".equals(currentToken)) {
isCurrentNegative = true;
} else if ("+".equals(currentToken)) {
isCurrentNegative = false;
} else {
if (currentToken.contains("x")) {
if (currentToken.contains("^")) {
String[] tmp = currentToken.split("x\\^");
currentDegree = Integer.parseInt(tmp[1]);
int draftCoefficient = Integer.parseInt(tmp[0]);
currentCoefficient = (isCurrentNegative) ? - draftCoefficient : draftCoefficient;
} else {
currentDegree = 1;
String[] tmp = currentToken.split("x");
int draftCoefficient = (tmp.length == 0) ? 1 : Integer.parseInt(tmp[0]);
currentCoefficient = (isCurrentNegative) ? - draftCoefficient : draftCoefficient;
}
} else {
currentDegree = 0;
int draftCoefficient = Integer.parseInt(currentToken);
currentCoefficient = (isCurrentNegative) ? - draftCoefficient : draftCoefficient;
}
result.put(currentDegree, currentCoefficient);
}
}
return new Polynomial(result);
}
private String normalizeSourceString(String source) {
String result = source.replaceAll("\\s+","");
return result.toLowerCase();
}
}
Из сегодняшнего. Парсинг многочленов.