我正在尝试编写一个程序来对复数执行算术运算。复数在输入中以String形式给出。我想将字符串转换为实部和虚部。我需要帮助才能做到这一点。
以下代码是我一直在尝试的
MotherBall.Setting()
代码似乎适用于正数,但它会导致负复数(如-5.5 + 4i
)出错此代码只是为了获得真实的部分
答案 0 :(得分:0)
String[] okSamples = {"3", "-1.0", "7i", "i", "+i", "-i", "4-7i", "-3.4i", ".5", "3."};
String[] badSamples = {"", "1.0.5i", "+", "-"};
String doubleRegex = "[-+]?(\\d+(\\.\\d*)?|\\.\\d+)";
Pattern doublePattern = Pattern.compile(doubleRegex);
对于总体模式而言,案例过于繁琐,无法正确处理并涵盖大多数情况:
// Not okay:
Pattern complexPattern = Pattern.compile("(?<re>" + doubleRegex + "?)"
+ "(?<im>((" + doubleRegex + "i|[-+]?i))?)";
所以在代码中处理案例。例如:
double re = 0.0;
double im = 0.0;
Matcher m = doublePattern.matcher(c);
if (m.lookingAt()) {
re = Double.parseDouble(m.group());
c = c.substring(m.end());
m = doublePattern.matcher(c);
if (c.matches("[-+].*") && m.lookingAt()) {
im = Double.parseDouble(m.group());
c = c.substring(m.end());
if (!c.equals("i")) {
throw new NumberFormatException();
}
} else if (c.matches("[-+]i")) {
im = c.startsWith("-") ? -1.0 : 1.0;
} else {
throw new NumberFormatException();
}
} else if (c.matches("[-+]i")) {
im = c.startsWith("-") ? -1.0 : 1.0;
} else {
throw new NumberFormatException();
}
这可以更加稳固地处理检索。 lookingAt
从字符串的开头部分匹配。